Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
6 страниц V  < 1 2 3 4 > »   
Ответить в эту темуОткрыть новую тему
> Гражданский ИИ
denis0k
сообщение Oct 6 2012, 17:13
Сообщение #36


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



А я просто поискал по "tmi" на волте и взял первое попавшееся среди свежего (IMG:style_emoticons/kolobok_light/smile.gif) Там в названии тми есть.
Цитата
Да я чето тоже сомневаюсь что мускул будет выдавать операции над кучей данных быстро..
Это как бы его профиль (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Oct 6 2012, 20:04
Сообщение #37


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



Цитата
Забавно. Клёвый алгоритм сложности O(n^2) вызывает стопроцентный тми, хотя выполняется за полсекунды Элементов немного (пока 60, по-хорошему надо 200+), но в скрипте парочка O(n) и один O(n^2) - вылетает на 20й итерации внешнего цикла последнего Расчёты действительно немаленькие (расстояния, массивы через строковые операции, возведение в степень), но выглядит смешно даже для 2002го.

Завтра перепишу под sql, выкину часть алгоритмов наружу, на трёх O(n) надеюсь заработает и при 200 элементах.


Это ты что такое там считаешь? - баллистическую траекторию 50 НПС в стратосфере? (IMG:style_emoticons/kolobok_light/smile.gif)

Сообщение отредактировал Melisse - Oct 6 2012, 20:04
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 6 2012, 21:08
Сообщение #38


Level 6
**

Класс: Друид
Характер: Chaotic Neutral
Раса: Гном



Как с контейнерами быть? НПС замечают их, подходят, осматривают и открывают. Действие ActionTakeItem не выполняют. Пришлось на контейнеры на OnOpen вешать скрипт на проверку
Код
       object oUser = GetLastOpenedBy();
       if (GetIsObjectValid(oUser)
            &&!GetIsPC(oUser)
            &&!GetIsPossessedFamiliar(oUser)
            &&!GetIsDM(oUser)
            &&!GetIsDMPossessed(oUser)) {копировать айтемы себе в инвентарь; удалить старые;}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 6 2012, 23:02
Сообщение #39


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Melisse:
Алгоритм Дейкстры для поиска кратчайшего пути по дереву вейпоинтов. При реализации на простых линейных массивах там именно два больших вложенных цикла. Это можно оптимизировать, но нужные структуры данных в нвн просто не сделать (двоичные кучи, фибоначчиевы кучи и т.п.).

Не желая рубить с плеча, я перекинул все "массивы" в мускл (заменив 4 массива одной таблицей) и переложил на него же функцию поиска минимального значения по заданным условиям. Результат - никаких тми, скрипт выполняется за 150мс. Для единичного запуска (для каждого нпс раз в несколько игровых часов) это немного.

Потестирую эту систему на бОльшем количестве точек и мб перепишу на нвнх без мускла, будет ещё быстрее. Сейчас у меня 2 внешних локации и 1 внутренняя, 63 вейпоинта с 1-6 связями. В городе обычно 2-3 связи, в таверне - паутина из точек (IMG:style_emoticons/kolobok_light/smile.gif)

Зачем это нужно? Представь город из 10+ локаций. Берём непися, ставим где угодно и указываем идти куда угодно, хоть через 10 локаций. И он пойдёт (IMG:style_emoticons/kolobok_light/smile.gif) Причём не лбом в стену, а по дорогам, как все нормальные люди. Причём по кратчайшему пути. Нужны лишь вейпоинты, олицетворяющие сеть дорог, и скрипт.

Anakondar:
Давай всю техническую фигню унесём в соответствующие топики? (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 6 2012, 23:12
Сообщение #40


Level 6
**

Класс: Друид
Характер: Chaotic Neutral
Раса: Гном



denis0k: Главное, чтоб ответ появился, а где - не важно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Oct 6 2012, 23:48
Сообщение #41


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



Цитата
Не желая рубить с плеча, я перекинул все "массивы" в мускл (заменив 4 массива одной таблицей) и переложил на него же функцию поиска минимального значения по заданным условиям. Результат - никаких тми, скрипт выполняется за 150мс. Для единичного запуска (для каждого нпс раз в несколько игровых часов) это немного.

MySQL и такое умеет?
Я не совсем понимаю... эти страшные названия алгоритмов и куч, ибо у мня образование другой направленности, но мне интересно. (IMG:style_emoticons/kolobok_light/smile.gif)
Тебе мускл сразу возвращает все необходимые данные одним запросом, сам поискав - и так для каждого НПС, но запуск всех спавнов при старте модуля = одновременный запрос n-го числа НПС, он справляется?

Сообщение отредактировал Melisse - Oct 6 2012, 23:49
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Oct 7 2012, 01:46
Сообщение #42


Level 8
***

Класс: Псионик
Характер: Chaotic Neutral
Раса: Хафлинг



Цитата(Melisse @ Oct 7 2012, 07:48) *
MySQL и такое умеет?
Я не совсем понимаю... эти страшные названия алгоритмов и куч, ибо у мня образование другой направленности, но мне интересно. (IMG:style_emoticons/kolobok_light/smile.gif)
Тебе мускл сразу возвращает все необходимые данные одним запросом, сам поискав - и так для каждого НПС, но запуск всех спавнов при старте модуля = одновременный запрос n-го числа НПС, он справляется?

там наверное такое извращение многоэтажное получается в запросе (IMG:style_emoticons/kolobok_light/smile.gif) . еще поди фильтровать запросы для безопасности.
Почему бы стразу не писать плагин, он же всяко будет быстрее работать, мне кажется, чем связка НВН-НВНХ-MySQL-сервер :?

Сообщение отредактировал PaiNt - Oct 7 2012, 01:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Oct 7 2012, 03:02
Сообщение #43


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Плагин писать сложнее и дольше.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 7 2012, 06:38
Сообщение #44


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
Тебе мускл сразу возвращает все необходимые данные одним запросом, сам поискав
При расчёте минимума по заданному условию - да. Обычный селект может на лету сортировать результат, причём делает это явно оптимально. В отличие от массива через строку, где приходится проверить все элементы.
Цитата
и так для каждого НПС, но запуск всех спавнов при старте модуля = одновременный запрос n-го числа НПС
Вряд ли одновременный, он последовательный (IMG:style_emoticons/kolobok_light/smile.gif) Тем более какая разница, что там раз в 10 часов модуль грузит, они же не в реальном времени в бою это делают.
Цитата
он справляется
Ну справляется же контакт, когда миллион задротов жмёт лайки (IMG:style_emoticons/kolobok_light/smile.gif) Субд очень шустрые, мои 100 запросов в цикле - фигня полная.
Цитата
Почему бы стразу не писать плагин, он же всяко будет быстрее работать, мне кажется, чем связка НВН-НВНХ-MySQL-сервер :?
Во-первых, скачать студию на новый комп - уже дольше, чем переписать под sql (IMG:style_emoticons/kolobok_light/smile.gif) Во-вторых, оптимизационные моменты решаются потом. На старте важно вообще что-то сделать и быстро. Без фанатизма конечно, пути для оптимизации быть должны, но делать её на этапе проектирования - напрасный труд.

Идеального нет ничего, можно один этот поиск пути переписывать год. Но это неинтересно (суть-то системы в другом) и бессмысленное - ускорение даже втрое относительно текущего значения ничего не даст (IMG:style_emoticons/kolobok_light/smile.gif) Это происходит реально редко - пусть считается лишь раз, но даже если нпс будет непрерывно ходить туда-сюда по модулю, всё равно время его ходьбы многократно больше времени расчёта.

Сообщение отредактировал denis0k - Oct 7 2012, 06:49
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Oct 7 2012, 09:18
Сообщение #45


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



А как решается проблема хербита в локация, где нет игрока - он там либо отрубается,либо запускается с большими задержками. Помнится, нпс заходят в дом и все - пока туда не пришел игрок, он не выйдет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 7 2012, 11:13
Сообщение #46


Level 6
**

Класс: Друид
Характер: Chaotic Neutral
Раса: Гном



Цитата(denis0k @ Oct 7 2012, 07:38) *
Вряд ли одновременный, он последовательный (IMG:style_emoticons/kolobok_light/smile.gif)

Ага, следующий не запускается, пока не выполнится предыдущий. Благодаря этому можно устроить нумерацию мобов: модульную локалку-счётчик, инкрементирующуюся при каждом спауне и кричерскую локалку-номер с текущим значением счётчика. Гарантировано все номера будут разные.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Flaristan
сообщение Oct 7 2012, 17:59
Сообщение #47


Тролль
****

Класс: Пьяный Мастер
Характер: Chaotic Neutral
Раса: Тварь



Цитата(Anakondar @ Oct 6 2012, 11:05) *
Смысл локалок в том, что НПС не знают изначально массу вещи, поэтому подходят и смотрят каждую и либо подбирают, либо вешают локалку.
Учти ещё, что у них не бывает перегруза и GetWeight на них всегда возвращает 0.
«Гет вейт» не работает на криттеров как определялка массы всего их инвентаря – он как раз нужен в тех случаях, когда требуется узнать массу вещи.

Цитата(Anakondar @ Oct 6 2012, 21:08) *
Как с контейнерами быть? НПС замечают их, подходят, осматривают и открывают. Действие ActionTakeItem не выполняют. Пришлось на контейнеры на OnOpen вешать скрипт на проверку
Действие «ActionTakeItem» по умолчанию изымает, а не переносит вещь – чтоб описать его в виде транзакции, его нужно использовать через оператор «AssignCommand» для осуществителя транзакции; при этом если осуществитель транзакции не способен взаимодействовать с вещами, использовать вместо него действие «ActionGiveItem» привзянное на объект транзакции с получателем на осуществителе транзакции (конечно при условии что объект транзакции в этом случае может взаимодействовать с вещами):
AssignCommand(oTarget, ActionTakeItem(oItem, oObject));
AssignCommand(oObject, ActionGiveItem(oItem, oTarget)).

P.S.: Кстати у НПС есть 2 слоя инвенторя: обычный (доступный всем) и служебный (доступный только НПС) – я это не отслеживал, но вполне может так случиться что вещь по умолчанию попадает в служебный и далее существует в игре только для НПС. Однако при транзакции вещей (НПС взял вещь – НПС отдал вещь) это не имеет значения.

Цитата(Melisse @ Oct 7 2012, 09:18) *
А как решается проблема хербита в локация, где нет игрока - он там либо отрубается,либо запускается с большими задержками. Помнится, нпс заходят в дом и все - пока туда не пришел игрок, он не выйдет.
Просто поставить условие по времени или событийный триггер которые выгоняет НПС из дома. У меня стоят в АИ криттеров аналогичные системы на хеартбите – вроде они работают даже в «свернутом» режиме без игроков в модуле, и криттеры оказываются при появлении игрока там, где им прописано.

Сообщение отредактировал Flaristan - Oct 7 2012, 18:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 7 2012, 21:55
Сообщение #48


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
А как решается проблема хербита в локация, где нет игрока
Просто - он не используется.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 7 2012, 22:27
Сообщение #49


Level 6
**

Класс: Друид
Характер: Chaotic Neutral
Раса: Гном



Как определить отсутствие игрока в локации?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Flaristan
сообщение Oct 7 2012, 22:48
Сообщение #50


Тролль
****

Класс: Пьяный Мастер
Характер: Chaotic Neutral
Раса: Тварь



Берем дверь, ставим на триггер OnOpen:
Код
void main(script1)
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, -1, -1, -1, -1);
object oArea = GetArea(OBJECT_SELF);

if ((GetIsObjectValid(oPC))&&(GetArea(oPC) == oArea))
   {
   if (GetIsOpen(OBJECT_SELF))
      {
      DelayCommand(300.0, SetLocked(OBJECT_SELF, FALSE));
      }
      else
      {
      return;
      }
   }
   else
   {
   ActionCloseDoor(OBJECT_SELF);
   }
}

и на OnUnLock:
Код
void main()
{
ExecuteScript("script1", OBJECT_SELF);
}

…в результате получаем дверь, которая будучи однажды открыта кем-либо раз в 5 минут проверяет свое состояние, и в случае если она открыта и игрока нет поблизости – затворяет (при необходимости и запирает) себя и прекращает проверки. Система из моего модуля «антиполтергейст» - всегда раздражали самозакрывающиеся двери на шардах…
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Oct 8 2012, 08:02
Сообщение #51


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



Вы чего-то не в том разделе со скриптами. Есть же спешл тема.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 11 2012, 21:26
Сообщение #52


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Небольшой вопрос по организации коллекции точек интереса. Есть два варианта:

1. Один номер - много тегов. Пример: №1 - таверна, отдых, бухло, ночлег, №8 - хозяйство, огород, №15 - одиночество, пруд, рыбалка, №16 - одиночество, опушка, ягоды, цветы...
Выбор происходит по тегам - получаем все номера и потом рандомайзим, если вышло несколько точек.
+ у точки может быть несколько целей, разные неписи могут прийти туда с разными целями
+ довольно органично выглядит

2. Один тег - много точек. Пример: таверна - №1, 2, 4, огород - №8, 9, пруд - №16...
+ простота реализации - выбираем цель и рандомом внутри неё номер
- сложно заполнять таблицу - один номер надо пихать в разные теги

Сейчас голова не варит, но что-то мне подсказывает, что вариант 2 будет очень сложно поддерживать, похоже на колосс на глиняных ногах. Идеи? Может какая комбинация?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 11 2012, 22:14
Сообщение #53


Level 6
**

Класс: Друид
Характер: Chaotic Neutral
Раса: Гном



Ксати (хотя не кстати, но пофигу, пусть будет), идея для поведения НПС: они иногда ходят в лес по той или иной нужде и имеют некий шанс заблудиться в лесу. Кричать "Ау!" или прятаться от диких зверей, подходить с вопросами "Как пройти в город?" или просьбами "Спасите меня!" к игрокам и другим энписям. Можно и в городе что-нибудь подобное: "Где тут библиотека?"
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Flaristan
сообщение Oct 12 2012, 01:04
Сообщение #54


Тролль
****

Класс: Пьяный Мастер
Характер: Chaotic Neutral
Раса: Тварь



ОМГ *представил себе какие веселые баги могут возникнуть со всеми этими системами* Ну правда – у меня даже с крысиной системой «рефлекторного» уровня всплыло множество багов при отладке ее в модуле, а вы хотите полноценных «киборгов» наделать… Чую это получится попросту неиграбельно. Попробуйте поставить себе задачу попроще: сделайте АИ для самых банальных городских НПС таких как кузнец, стражник, торговец, бомж и т.д. – продумайте каким индивидуальным поведением должен этот НПС выделяться (чтоб показать всячески что он именно тот кто описан в «квенте»), придумайте чем бы он мог его разнообразить (чтоб не смотрелся как одна сплошная анимация или памятник), реализуйте это, настройте и протестите всячески в модуле. Затем уж беритесь добавлять новые ветки поведения. Иначе получится что вы «титаник» забабахаете, который на первом же айсберге с парадами и феерверками неблагодарно потонет с концами.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 12 2012, 07:16
Сообщение #55


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Не вижу ничего сложного (IMG:style_emoticons/kolobok_light/unsure.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Oct 12 2012, 08:14
Сообщение #56


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



1 больше нравиться, мне кажется и лучше.
Вопрос: а как несколько городов? Для каждого города свои точки или одни точки на весь модуль?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 12 2012, 17:21
Сообщение #57


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
а как несколько городов? Для каждого города свои точки или одни точки на весь модуль?
Префикс тега вейпоинтов хранится локалкой на локации. Можно один набор на весь шард, можно по несколько на город. Но из-за квадратичной сложности алгоритма поиска пути лучше все независимые друг от друга пути делать разными наборами.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Flaristan
сообщение Oct 12 2012, 19:25
Сообщение #58


Тролль
****

Класс: Пьяный Мастер
Характер: Chaotic Neutral
Раса: Тварь



Цитата(denis0k @ Oct 12 2012, 07:16) *
Не вижу ничего сложного (IMG:style_emoticons/kolobok_light/unsure.gif)
Тогда советую поиграть самому в то, что делаешь. (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 12 2012, 22:10
Сообщение #59


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Ты не поверишь, но я у себя всё это обкатываю.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Flaristan
сообщение Oct 14 2012, 03:19
Сообщение #60


Тролль
****

Класс: Пьяный Мастер
Характер: Chaotic Neutral
Раса: Тварь



…Я надеюсь. Только «обкатать» и «поиграть» - это все-таки разные вещи. Не раз сталкивался с проблемой, когда разраб вносит в игру по его мнению разумную вещь, которая по мнению же игроков является попросту «ненужным геморроем». И не раз после обкатки и введения систем у себя замечал такой геморрой, уже играя в собственный модуль – после чего приходилось править заново. Причем дело даже не во взгляде на игру в целом «с верху», когда вся картина видна целиком. Дело в банальном не ощущении геймплея изнутри. Чтоб хорошо делать для игроков, а не для себя – нужно играть в то, что сделал.

Сообщение отредактировал Flaristan - Oct 14 2012, 03:22
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

6 страниц V  < 1 2 3 4 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 7th July 2025 - 11:55