Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Neverwinter Nights Aurora Toolset _ Гражданский ИИ

Автор: denis0k Oct 2 2012, 17:46

Стало немного скучно, и я по наводке Вирусмана решил сделать сабжевую хрень smile.gif Заодно сделаю топик на тему нвн, каких тут почти не осталось smile.gif

Суть работы сабжа проста. Обычно на коммонеров вешают что-то типа рандомволка, и они тупо слоняются туда-сюда, втыкаясь во все углы. Либо просто вырубают им ИИ, чтобы они как буратины стояли на месте (ммо-стайл). Мне было предложено искусственному интеллекту добавить немного... интеллекту smile.gif Заставлю неписей заниматься делами: кто-то утром пойдёт на работу (а вечером - домой), кто-то - молиться, кто-то - бухать и т.п. Всё без индивидуальных маршрутов и скриптов.

Что уже сделано: самое скучное - поиск кратчайшего пути по дереву вейпоинтов, ходьба из пункта А в пункт Б хоть через 10 локаций.
Что предстоит сделать: самое весёлое - запрограммировать болванчиков на свободу выбора жизненных приоритетов.
Нафига: а хз, для разминки мозгов. Ну и мб Экзису всё-таки пригодится.

В любом случае, все наработки я выложу в общий доступ.

Ах да. Есть хитрые идеи творческого плана?

Автор: Ilerien Oct 2 2012, 19:02

Всячески поддерживаю идею. good.gif
Творческий план сходу не выдам, но и так более-менее понятно, с какого конца браться: заскриптить последовательности анимаций (к слову, есть смысл взять расширенные с волта - там уже довольно давно есть фикс на их нормальную работу с плащами) и привязать их к местам, раздать неписям приоритеты (кто больше хочет бухать в трактире, а кто чаще по храмам), сделать глобальный балансировщик, который будет более-менее равномерно распределять неписей по занятиям. Из плюшек - реакция на плохую погоду, например, как это сделано в Ведьмаке. smile.gif

Автор: Melisse Oct 2 2012, 20:59

драки в баре и разговоры на разные темы, аля слухи в обливион

Автор: denis0k Oct 2 2012, 22:44

Цитата
есть смысл взять расширенные с волта - там уже довольно давно есть фикс на их нормальную работу с плащами
Ссылочку?
Цитата
раздать неписям приоритеты (кто больше хочет бухать в трактире, а кто чаще по храмам)
Это в планах изначально. Помимо базовой цели типа работы стоит придумать аффиксы (в стиле дьяблы) - алкаш имеет +Х% шанс пойти в кабак после или вместо работы и т.п.
Цитата
реакция на плохую погоду, например, как это сделано в Ведьмаке
Запишу.
Цитата
драки в баре и разговоры на разные темы, аля слухи в обливион
А в скайриме есть ещё клёвые барды. Сама игра довольно быстро наскучила, но вот бардов запомнил хорошо.

Автор: Ilerien Oct 2 2012, 23:09

Цитата
Ссылочку?
http://nwvault.ign.com/View.php?view=other.detail&id=1334
Насколько я помню, эти. Я тестил с плащами - большинство работает нормально, но есть анимации, где плащи выглядят странно, например, лежание на боку.

Автор: PaiNt Oct 3 2012, 01:37

Мне кажется большее внимание стоит уделять реакции на окружающий мир, как уже сказали выше на дождь например. Ведь реалиях сколько-либо PW-шного модуля окружающий мир меняется довольно прилично.. И как будет смотреться например нпс, по вечерам отправляющийся в таверну побухать, когда например днем город осадили скажем орки. Понаубивали кучу народу, да и таверну собственно подожгли.
Вообще мне видится успешный ИИ именно в "прокачке" реакционного интелекта (тип ситуации > равнозначные_варианты_решения), вопрос в том как это с точки зрения "программирования(наращивания этого списка реакций)" удобнее организовать..
Универсальный "механизм принятия решений" для выполнения того или иного действия НПС , хз.. мне кажется это вообще несбыточная мечта nea.gif .

Автор: Flaristan Oct 3 2012, 03:32

Я вот пытался сделать кастомный АИ для мобов (не для гражданских, а вообще – в плане для каждого типа криттеров свой отдельный индивидуальный АИ). Тут мне кажется делать универсальный скрипт будет слишком громоздко и в итоге не выйдет ничего хорошего. Лучше для каждого типа криттеров делать индивидуальный с учетом минимума базовых задач (деревенский пьянчуга отдельно, деревенский плотник отдельно и т.п.). Так оно будет смотреться в игре более ярко и соответствующе ролям НПС.
Например из готовых АИ класса «бродилки» у меня есть летучие мыши (практически чистый рендумволк со стилизацией и минимумом повадок) + куропатки (тоже практически чистый рендумволк с закосом под повадки голубей). Из более продвинутого АИ готов крысиный (тут уже использовалась индивидуальная блок-схема поведения и повадок делающая из криттеров действительно нечто похожее на мелких хищных стайных животных, ориентирующихся в игре самостоятельно в соответствии с обстоятельствами). http://cs304108.userapi.com/v304108778/1cf0/0R4idMcTWfY.jpg. Так же на деле все это можно посмотреть при желании и в модуле.

Автор: denis0k Oct 3 2012, 07:44

Цитата
Мне кажется большее внимание стоит уделять реакции на окружающий мир, как уже сказали выше на дождь например.
Да. Вот это в программировании ИИ меня и привлекает - куча мелочей smile.gif
Цитата
Лучше для каждого типа криттеров делать индивидуальный с учетом минимума базовых задач
С т.з. программирования это не по фен-шую smile.gif Наделаешь вот так 100 разных крич с разными скриптами, а потом оказывается, что вот эти базовые задачи, которые везде раскопипастены, надо модифицировать.

Автор: PaiNt Oct 3 2012, 09:09

Цитата(denis0k @ Oct 3 2012, 15:44) *
Да. Вот это в программировании ИИ меня и привлекает - куча мелочей smile.gif
С т.з. программирования это не по фен-шую smile.gif Наделаешь вот так 100 разных крич с разными скриптами, а потом оказывается, что вот эти базовые задачи, которые везде раскопипастены, надо модифицировать.


Вообще я думаю задача в пределе - собрать такой суперпупер "фреймворк" используя наиболее рационально все возможности тулсета (не только NWScript), а возможно и НВНХ - чтобы:
-можно было писать(программировать человеку) "поведение НПС" максимально высокоуровнево, с максимальной контекстностью. Возможно стоило обратить внимание на какие-то реально разрабатываемые языки для "обучения " ИИ в мире, там наверное обозначают основные проблемы в этой сфере программирования.

Биовары пошли по пути вейпойнтов и локальных переменных заданных при создании существа, но тут уже только в этом 2 параметра которые нужно регулировать в разных местах вместо одного - уже плохо.

Автор: Rewazer Oct 3 2012, 09:26

Цитата
С т.з. программирования это не по фен-шую
+1, но так или иначе все упирается в создание "леса стратегий поведения" т.е. множества древовидных последовательностей скриптов с АИ

Автор: Melisse Oct 3 2012, 09:28

Цитата
Биовары пошли по пути вейпойнтов и локальных переменных заданных при создании существа, но тут уже только в этом 2 параметра которые нужно регулировать в разных местах вместо одного - уже плохо.

Где-то на ваулте был такой интересный пакет. Там о хищниках и травоядных. Так вот хищники переодически прогуливались до точки, где собирались травоядные, по пути рандомно создавая случайные локации, по которым они пробирались. Если делать таким способом....Тормозить такой метод не будет? мне кажется если есть точка - то не сложно ее найти, чем генерировать каждые 6.0 сек случайную? Помниться в стандартных встречах если не поставить точку спавна, то она автоматом генерируется на удобном расстоянии от игрока - это кушает ресурсов сервера и не особо рекомендуется.

Автор: denis0k Oct 3 2012, 17:57

Цитата
можно было писать(программировать человеку) "поведение НПС" максимально высокоуровнево, с максимальной контекстностью. Возможно стоило обратить внимание на какие-то реально разрабатываемые языки для "обучения " ИИ в мире, там наверное обозначают основные проблемы в этой сфере программирования.
Нвскрипт - и есть этот высокоуровневый фреймворк smile.gif И городить сверху ещё огород - уже не очень с руки. Проблема в данном случае в том, что он тормозной, по кастомным боевым ИИ это хорошо видно. Если, к примеру, мобов с джаспером натыкать штук 40, они так будут скриптами шуршать, что либо хертбит будет раз в 20 секунд, либо сервер попросту ляжет smile.gif

Да, программирование не предлагает иного варианта, кроме как дерева условий, но я думаю, как это оптимизировать smile.gif Вопросом ИИ я давно увлекаюсь.
Цитата
Биовары пошли по пути вейпойнтов и локальных переменных заданных при создании существа, но тут уже только в этом 2 параметра которые нужно регулировать в разных местах вместо одного - уже плохо.
Я скрипты свои с нуля пишу, кучу ненужных настроек я брать не буду. На данный момент нет никаких переменных в том объёме, что они есть в дефолтном ИИ smile.gif
Цитата
мне кажется если есть точка - то не сложно ее найти, чем генерировать каждые 6.0 сек случайную
Куда-то вы забурились не туда smile.gif Нет никаких случайных точек.

Автор: Ilerien Oct 3 2012, 18:54

Цитата(denis0k @ Oct 3 2012, 17:57) *
Нвскрипт - и есть этот высокоуровневый фреймворк smile.gif И городить сверху ещё огород - уже не очень с руки. Проблема в данном случае в том, что он тормозной, по кастомным боевым ИИ это хорошо видно. Если, к примеру, мобов с джаспером натыкать штук 40, они так будут скриптами шуршать, что либо хертбит будет раз в 20 секунд, либо сервер попросту ляжет smile.gif
Ден, это скорее проблема реализации smile.gif Джасперовский АИ очень хорош с точки зрения учёта всего-чего-изволите, но реализован крайне топорно. Пример: функция, отвечающая за каст боевых заклинаний, пробегает почти все их с проверкой вида if(GetHasSpell(SPELL_FREAKING_SOMETHING))ActionCas
tSpell(SPELL_FREAKING_SOMETHING, GlobalTarget), а правильный подход в данном случае - кэшировать в онспавне/онресте существующие заклинания и кастовать их уже из таблицы. С использованием в сомнительных местах NWNX для быстрого доступа к содержимому слотов.

Как вариант, вынести наиболее требовательные к времени исполнения части в NWNX (2.8 API не идеален, но им в отличии от предыдущих версий можно пользоваться без непрерывного потока нецензурных мыслей).

Автор: denis0k Oct 3 2012, 19:21

Видел я эти вилки по 15к строк кода smile.gif Титанический труд. Но когда я оставил зоопарк из штук 30 тестовых мобов в спецлокации и запустил модуль, с тми вывалились перцепшн-скрипты smile.gif Кажется, до просчёта спеллов дело даже не дошло.

С коммонерами этой проблемы быть не должно - у них нет 500 спеллов smile.gif

Я получил в своё распоряжение тестовую площадку, буду на днях продолжать изыски smile.gif

 

Автор: Anakondar Oct 3 2012, 23:55

Вспомнилась одна строчка из песни, которая иногда как нельзя лучше отражает поведение АИ в НВН:

-Если друг оказался вдруг и не друг и не враг - attack!

Автор: PaiNt Oct 4 2012, 00:12

Цитата(denis0k @ Oct 4 2012, 03:21) *
Видел я эти вилки по 15к строк кода smile.gif Титанический труд. Но когда я оставил зоопарк из штук 30 тестовых мобов в спецлокации и запустил модуль, с тми вывалились перцепшн-скрипты smile.gif Кажется, до просчёта спеллов дело даже не дошло.

С коммонерами этой проблемы быть не должно - у них нет 500 спеллов smile.gif

Я получил в своё распоряжение тестовую площадку, буду на днях продолжать изыски smile.gif

Тут спелы как пример говорится. Я думаю и в програмировании АИ найдутся "узкие места" ничуть не легче с точке зрения производительности чем джасперовские 500 некешированых заклов. Например. мы хотим делать реакции на окружение (в частности креачуров, плейсаблы), так в хорошей локе плотность объектов на сантиметр экрана - очень большая, а если например у нас запрограмленна реакция только на один среди этой кучи? всеравно перебирать нужно все в области видимости? а если еще учитывать "геометрическую видимость", и если этих комонеров штук 10 рядом - то вообще жопа.

А про высокоуровневость я с тобой не согласен, я имею ввиду что средство в котором можно будет разрабатывать "реакции для ИИ"(программировать этот самый ИИ) должно иметь наиболее оторванность от аппаратной/cпец(в нашем случае можно сказать от NWScript) части и ближе к человеческому языку и построению "логики решений" самого человека, это позволило бы програмировать поведение в общем случае быстрее(за день допустим ты запрограмлишь 20 вариантов ИИ, вместо 10, при равном конечном качестве) чем ковыряясь в дебрях различных событий NWScript и проблемах его применимости.. Мне показалось чтот-то похожее что я имею ввиду http://ru.wikipedia.org/wiki/CLIPS , язык для экспертных систем.

А контекст - это смена значения одного и того же написанного кода он применяется к разным вещам, грубо говоря пишем команду "помочится", если команда применяется к человеку - он идет в отхожее место но если команда применяется например к собаке - она ищет дерево и поднимает заднюю лапу - строчка кода одна, контекста два.

Автор: Flaristan Oct 4 2012, 01:50

Цитата(denis0k @ Oct 3 2012, 07:44) *
С т.з. программирования это не по фен-шую smile.gif Наделаешь вот так 100 разных крич с разными скриптами, а потом оказывается, что вот эти базовые задачи, которые везде раскопипастены, надо модифицировать.
Ну тут уже зависит какова ваша цель: создать качественную программу, или качественную игровую среду. Можно использовать гибкий и легко податливый изменениям код, можно поступить еще профессиональнее и сделать его через инклюды… Но как правило для отличного результата в игре не понадобится 100 разных крич – половина от силы, а то и треть; с развитым АИ – единицы. Чтоб получилось хорошо, нужно делать не универсально, а специализированно. Естественно придется много работать, чтобы это сделать.

Цитата(Melisse @ Oct 3 2012, 09:28) *
хищники переодически прогуливались до точки, где собирались травоядные, по пути рандомно создавая случайные локации, по которым они пробирались
Вейпоинты – это такой же «якорь», как и нефеншуйно скомпилированные скрипты. Я прибегал к вейпоинтам только в самом крайнем случае и только в порядке прописывания конкретного эвента. Например если у вас есть страж патрулирующий улицы города в определенные часы – проще накидать ему оригинальных вейпоинтов и не морочиться; а если это АИ разбойника который может спавниться в n-различных местах – нужно выбирать: делать ли целый комплекс спавна для этого криттера, включающий ряд однотипных служебных вейпоинтов расставляемых на каждой локации вручную, или написать по большей части казуальный рендумволк с множеством «if» подразумевающих обобщенные событийные триггеры которые могут произойти в этих локациях.
Естественно последний вариант более универсальный; но с другой стороны страж при исполнении тыкающийся по бордюрам клумб, стенам домов и заборам – довольно жалкое зрелище. Вывод – все должно опираться на чувство меры разработчика.

Полноценный «Искусственный Интеллект» изобретать вовсе не обязательно, достаточно качественно сделать имитацию одной или нескольких наиболее ярких особенностей. ПС все равно не будет беседовать с первым попавшимся неквестовым НПС о смысле жизни или приглашать на свидание в ближайшую таверну – для этого есть другие игроки (вы же не делаете совсем синглплеер), а НПС должны быть всего лишь качественными декорациями которые будут создавать видимость целостности издалека.

Автор: Melisse Oct 4 2012, 09:59

Цитата
Если, к примеру, мобов с джаспером натыкать штук 40, они так будут скриптами шуршать, что либо хертбит будет раз в 20 секунд, либо сервер попросту ляжет


А зачем 40 штук в одной локации?
Помниться, на геме1, я ставила 30 мобов и тут же начинались лаги и аи просто не работал. Мне кажется, что на это и не расчитан сервер. В локации 12х12 тайлов (рекомендовано не больше 150 тайлов), оптимально работают 10 мобов, при 15 уже хуже - дык больше и не надо + еще игроки. Для того и существуют экаунтеры (не только стандартные), чтобы спавнить встречи 1-6 мобов.

Автор: Anakondar Oct 4 2012, 13:48

Цитата(Melisse @ Oct 4 2012, 09:59) *
А зачем 40 штук в одной локации?
Помниться, на геме1, я ставила 30 мобов и тут же начинались лаги и аи просто не работал. Мне кажется, что на это и не расчитан сервер. В локации 12х12 тайлов (рекомендовано не больше 150 тайлов), оптимально работают 10 мобов, при 15 уже хуже - дык больше и не надо + еще игроки. Для того и существуют экаунтеры (не только стандартные), чтобы спавнить встречи 1-6 мобов.

Вот сейчас посмотрел специально. Городские подземелья Эндора. Локация 12х12. 67 мобов. Около 280 вэйпоинтов. Десятки плэйсэйблов. Во времена онлайна даже ночью там никогда не отсутствовали игроки. Лагало только однажды, когда там было выброшено несколько сотен неисчезающих скриптово вещей.

Автор: Melisse Oct 4 2012, 15:44

Цитата
Вот сейчас посмотрел специально. Городские подземелья Эндора. Локация 12х12. 67 мобов. Около 280 вэйпоинтов. Десятки плэйсэйблов. Во времена онлайна даже ночью там никогда не отсутствовали игроки. Лагало только однажды, когда там было выброшено несколько сотен неисчезающих скриптово вещей.

В локациях компании - в городе по 50 нпс стоит и нормально.
я про джаспероский аи, при некоторой настройке он вполне нормальный и не лагает, да при большом кол-ве.

Автор: Fimko Oct 4 2012, 17:34

Цитата(denis0k @ Oct 2 2012, 17:46) *
Ах да. Есть хитрые идеи творческого плана?

Не совсем самостоятельная идея, скорее дополнение. Сделать уровень занятости для НПС. В зависимости от этого уровня, НПС будет более целенаправленно и быстро шагать к своему вейпоинту, или наоборот с удовольствием глазеть на прохожих, поворачиваясь им вслед и охотно вступая в диалог. Если НПС, допустим, стражник спешащий на крики о помощи, то он вряд ли будет вступать в диалог с кем либо. Ну, а если это какой-нибудь бездельник, то и поболтать не прочь и лицом поторговать. Как вариант, при этом можно накладывать бонус/штраф скорости ходьбы/бега в приделах 10%. Это должно создать некую иллюзию того, что кто-то торопится а кто-то не особо.

Автор: Flaristan Oct 4 2012, 17:59

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

Автор: denis0k Oct 4 2012, 21:25

Оставлю пока ваши споры, займусь реализацией выбора целей. Просто захардкодить цели и сделать вилку из if-elseif не хочу, ща думаю над реализацией через бд и sql, пока выглядит довольно здраво.

Автор: virusman Oct 4 2012, 22:18

БД и SQL - это само собой, только я, как правило, подобные данные сразу кэширую в локальных переменных (с возможностью их обновления по требованию) и дальше уже работаю с ними. Всякие AI и прочие штуки постоянно используют свои данные, а лезть каждый раз в базу за ними - слишком дорого.
Пиши в аську, если что. Я всё-таки продумывал эту тему в своё время. smile.gif

Автор: Anakondar Oct 5 2012, 17:38

Вот ещё что нужно реализовать:

Если НПС видит валяющийся бесхозный шмот, он его осматирвает.
Если вещь неотайдентифаеная, пытается отайдентифаить. Если не получается, говорит "Я понятия не имею, что это", иначе "О, это же то-то!"
Далее решает брать или не брать. Если взял, решает надеть или не надеть. Если перегруз, то жалуется и выбрасывает что-нибудь (не обязательно это же).
Продолжает свои дела.

Если он видит бесхозный сундук\сумку\шкаф, то подходит.
В зависимости от того, закрыт он или нет, и наличия или отсутствия оупен лока, открывает. Далее с содержимым контейнера вышеописаный порядок.

И естественно в зависимости от степени гуманоидности все реакции.

Отредактировано:
Да, кстати, сделал только что у себя подбор вещей. Только вот проверку на перегруз не сделал. Есть какая-нибудь функция, которая это проверяет?

Автор: Flaristan Oct 5 2012, 22:17

Я крыс научил находить и подбирать на локации в пределах «видимости» брошенное мясо/приготовленное мясо/оккупировать трупы.

Можно через GetWeight() посчитать вес инвенторя и сравнивать с вычисляемым текущим грузоподъемом НПС от мода силы.

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

Автор: Anakondar Oct 6 2012, 00:07

Всё, вставил проверку на силу. Правда теперь после выбрасывания от перегруза тяжелого айтема пнс начинает идти по делам, потом вдруг замечает выброшенный (им же) айтем и с радостным криком "Ой, что я нашел!" бежит к нему. Подбирает его, перегружается, выбрасывает, и всё заново.

Пришлось после выбрасывания вешать на айтем локаль с результатом проверки на вес. Получается, после первого перегруза нпс заранее знают что сколько вокруг весит. Но в целом выглядит нормально, собиратели пустых бутылок занимаются бутылками, а на фулплейты не смотрят.

Автор: denis0k Oct 6 2012, 00:56

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

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

Автор: PaiNt Oct 6 2012, 01:08

Коль пошла такая пьянка, похвастаюсь и я идеями!
-НПС если находится рядом с плесаблами допускающими собирательство (куст Фенберри, грибы и т.д.) подходит к ним, ставит корзинку и собирает грибки!
-Если на пути НПС встречается какой-то из уличных светильников - он подходит и зажигает или тушит свет в них соответственно ночью и днем.
-Стражник, если рядом с ним "вскрывают" общественный контейнер начинает пристально наблюдать за вскрывающим (как в Леворе вообщемто)
-Если нпс бард - то он иногда может играть музыку, другие персонажи пока поисходит эта игра, проходя мимо могут остановится, сесть и послушать баладу.
-Если рядом с персонажем есть стул и официантка - то он может сесть и заказать какую-то еду, при этом официантка тоже участвует в этой анимации.

хотя конечно это все частные веселушки восновном.

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

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


в НВНХ еще нету конструкции подобной "Eval" или "Execute"? Расскажи как имено ты используешь SQL?

Автор: Anakondar Oct 6 2012, 02:08

Следующая итерация - заставляю воров нормально воровать, как у ПС так и у НПС. Хотя алгоритм прописал, пока воруют очень неохотно.

Автор: denis0k Oct 6 2012, 07:53

Цитата
в НВНХ еще нету конструкции подобной "Eval" или "Execute"?
Нет. Зато есть плагин, увеличивающий лимит инструкций на скрипт или убирающий ограничение вовсе. На волте даже рекомендуют в 2-4 раза лимит поднимать (дефолт ~130к). Но не очень хочется его привлекать, т.к. сервер однопоточный до мозга костей и подобные скрипты будут его тупо тормозить. Если играл на старых серверах, то мб помнишь, как одновременный сейв 30+ чаров на винт вызывал лаги на пару секунд smile.gif

Раз уж так выходит, что в кап не влезаю, постараюсь скрипты упростить. Иначе в будущем может быть лагодром.
Цитата
Расскажи как имено ты используешь SQL?
В данном случае немалую нагрузку вызывают 2 вещи - массивы и поиск внутри них во вложенном цикле. Массивов в нвн нет, приходится делать через строку и извлечение/замену подстрок smile.gif Я хочу попробовать выкинуть массивы наружу (они и нужны только на расчёт пути, раз в полгода то есть) и заодно организовать поиск минимума внутри за счёт субд.

Если и это окажется слишком накладно (к примеру, по какой-то причине субд от нвн не сможет принимать десятки запросов в секунду, что для неё вроде как бы мелочь), придётся думать над отдельным плагином для нвнх, уж на с++ эти расчёты можно сделать как два пальца.

Автор: Flaristan Oct 6 2012, 10:05

Цитата(Anakondar @ Oct 6 2012, 00:07) *
Пришлось после выбрасывания вешать на айтем локаль с результатом проверки на вес. Получается, после первого перегруза нпс заранее знают что сколько вокруг весит. Но в целом выглядит нормально, собиратели пустых бутылок занимаются бутылками, а на фулплейты не смотрят.
Перемудрил – зачем локалки вешать? Просто надо было добавить проверку вещи перед подъемом на массу: если масса содержимого инвентаря + масса обнаруженной на полу близлежащей вещи > максимальной переносимой массы == вещь не трогать, проверять n+1 ближайшую вещь, если она существует; иначе подобрать.
Только тогда проще сделать проверки на «нужность» вещей: если вещь на полу лучше того что одето на НПС – подобрать и надеть; если ее можно использовать (бутылки, свитки, палочки и т.д.) – подобрать и использовать в дальнейшем; если соотношение массы вещи и ее цены выгодное и НПС не перегружен – подобрать и сохранить; если вещь дешевая или НПС уже перегружен – подобрать и отнести выкинуть в ближайшую урну/продать торговцу и т.п..
Только все это ненужный перегруз модуля скриптами – если прям так уж хочется собирать с полу вещи, можно создать специальных неписей-сталкеров которые скажем в какую-то часть дня бродят по городу и подбирают всякий хлам, отправляя его сразу в свой магазин, который открывают для игрока осев на своей торговой точке другую часть дня. Или что-то вроде.

Автор: Anakondar Oct 6 2012, 11:05

Цитата(Flaristan @ Oct 6 2012, 11:05) *
Перемудрил – зачем локалки вешать? Просто надо было добавить проверку вещи перед подъемом на массу: если масса содержимого инвентаря + масса обнаруженной на полу близлежащей вещи > максимальной переносимой массы == вещь не трогать, проверять n+1 ближайшую вещь, если она существует; иначе подобрать.
Только тогда проще сделать проверки на «нужность» вещей: если вещь на полу лучше того что одето на НПС – подобрать и надеть; если ее можно использовать (бутылки, свитки, палочки и т.д.) – подобрать и использовать в дальнейшем; если соотношение массы вещи и ее цены выгодное и НПС не перегружен – подобрать и сохранить; если вещь дешевая или НПС уже перегружен – подобрать и отнести выкинуть в ближайшую урну/продать торговцу и т.п..
Только все это ненужный перегруз модуля скриптами – если прям так уж хочется собирать с полу вещи, можно создать специальных неписей-сталкеров которые скажем в какую-то часть дня бродят по городу и подбирают всякий хлам, отправляя его сразу в свой магазин, который открывают для игрока осев на своей торговой точке другую часть дня. Или что-то вроде.


Смысл локалок в том, что НПС не знают изначально массу вещи, поэтому подходят и смотрят каждую и либо подбирают, либо вешают локалку.
Учти ещё, что у них не бывает перегруза и GetWeight на них всегда возвращает 0.
А про магазин - это хорошая идея.

И да, воровство всё-таки работает. Просто у меня был детект маленький и я пероятность захотеть воровать поставил пропорционально скилу. На ночь оставил перса в городе. Утром - инвентарь пустой, даже денег нет. Проверил под ДМом - всё у воров.

Автор: PaiNt Oct 6 2012, 14:38

Цитата(denis0k @ Oct 6 2012, 15:53) *
Нет. Зато есть плагин, увеличивающий лимит инструкций на скрипт или убирающий ограничение вовсе. На волте даже рекомендуют в 2-4 раза лимит поднимать (дефолт ~130к). Но не очень хочется его привлекать, т.к. сервер однопоточный до мозга костей и подобные скрипты будут его тупо тормозить. Если играл на старых серверах, то мб помнишь, как одновременный сейв 30+ чаров на винт вызывал лаги на пару секунд smile.gif

Раз уж так выходит, что в кап не влезаю, постараюсь скрипты упростить. Иначе в будущем может быть лагодром.
В данном случае немалую нагрузку вызывают 2 вещи - массивы и поиск внутри них во вложенном цикле. Массивов в нвн нет, приходится делать через строку и извлечение/замену подстрок smile.gif Я хочу попробовать выкинуть массивы наружу (они и нужны только на расчёт пути, раз в полгода то есть) и заодно организовать поиск минимума внутри за счёт субд.

Если и это окажется слишком накладно (к примеру, по какой-то причине субд от нвн не сможет принимать десятки запросов в секунду, что для неё вроде как бы мелочь), придётся думать над отдельным плагином для нвнх, уж на с++ эти расчёты можно сделать как два пальца.

Да я чето тоже сомневаюсь что мускул будет выдавать операции над кучей данных быстро..хотя конечно строкомасивы - тоже не выход..

З.Ы. не подскажешь как этот плагин по лимиту инструкций называется? .. тоже как-то столкнулся с нехваткой когда приходилось анализировать 500 заклинаний и выбирать из них списки по критериямsad.gif, думаю для этой задачи можно было чтонибуть улучшить smile.gif.

Автор: Ilerien Oct 6 2012, 15:43

NWNX System

Автор: denis0k Oct 6 2012, 17:13

А я просто поискал по "tmi" на волте и взял первое попавшееся среди свежего smile.gif Там в названии тми есть.

Цитата
Да я чето тоже сомневаюсь что мускул будет выдавать операции над кучей данных быстро..
Это как бы его профиль smile.gif

Автор: Melisse Oct 6 2012, 20:04

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

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


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

Автор: Anakondar Oct 6 2012, 21:08

Как с контейнерами быть? НПС замечают их, подходят, осматривают и открывают. Действие ActionTakeItem не выполняют. Пришлось на контейнеры на OnOpen вешать скрипт на проверку

Код
       object oUser = GetLastOpenedBy();
       if (GetIsObjectValid(oUser)
            &&!GetIsPC(oUser)
            &&!GetIsPossessedFamiliar(oUser)
            &&!GetIsDM(oUser)
            &&!GetIsDMPossessed(oUser)) {копировать айтемы себе в инвентарь; удалить старые;}

Автор: denis0k Oct 6 2012, 23:02

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

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

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

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

Anakondar:
Давай всю техническую фигню унесём в соответствующие топики? smile.gif

Автор: Anakondar Oct 6 2012, 23:12

denis0k: Главное, чтоб ответ появился, а где - не важно.

Автор: Melisse Oct 6 2012, 23:48

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

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

Автор: PaiNt Oct 7 2012, 01:46

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

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

Автор: virusman Oct 7 2012, 03:02

Плагин писать сложнее и дольше.

Автор: denis0k Oct 7 2012, 06:38

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

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

Автор: Melisse Oct 7 2012, 09:18

А как решается проблема хербита в локация, где нет игрока - он там либо отрубается,либо запускается с большими задержками. Помнится, нпс заходят в дом и все - пока туда не пришел игрок, он не выйдет.

Автор: Anakondar Oct 7 2012, 11:13

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

Ага, следующий не запускается, пока не выполнится предыдущий. Благодаря этому можно устроить нумерацию мобов: модульную локалку-счётчик, инкрементирующуюся при каждом спауне и кричерскую локалку-номер с текущим значением счётчика. Гарантировано все номера будут разные.

Автор: Flaristan Oct 7 2012, 17:59

Цитата(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) *
А как решается проблема хербита в локация, где нет игрока - он там либо отрубается,либо запускается с большими задержками. Помнится, нпс заходят в дом и все - пока туда не пришел игрок, он не выйдет.
Просто поставить условие по времени или событийный триггер которые выгоняет НПС из дома. У меня стоят в АИ криттеров аналогичные системы на хеартбите – вроде они работают даже в «свернутом» режиме без игроков в модуле, и криттеры оказываются при появлении игрока там, где им прописано.

Автор: denis0k Oct 7 2012, 21:55

Цитата
А как решается проблема хербита в локация, где нет игрока
Просто - он не используется.

Автор: Anakondar Oct 7 2012, 22:27

Как определить отсутствие игрока в локации?

Автор: Flaristan Oct 7 2012, 22:48

Берем дверь, ставим на триггер 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

Вы чего-то не в том разделе со скриптами. Есть же спешл тема.

Автор: denis0k Oct 11 2012, 21:26

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

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

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

Сейчас голова не варит, но что-то мне подсказывает, что вариант 2 будет очень сложно поддерживать, похоже на колосс на глиняных ногах. Идеи? Может какая комбинация?

Автор: Anakondar Oct 11 2012, 22:14

Ксати (хотя не кстати, но пофигу, пусть будет), идея для поведения НПС: они иногда ходят в лес по той или иной нужде и имеют некий шанс заблудиться в лесу. Кричать "Ау!" или прятаться от диких зверей, подходить с вопросами "Как пройти в город?" или просьбами "Спасите меня!" к игрокам и другим энписям. Можно и в городе что-нибудь подобное: "Где тут библиотека?"

Автор: Flaristan Oct 12 2012, 01:04

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

Автор: denis0k Oct 12 2012, 07:16

Не вижу ничего сложного unsure.gif

Автор: Melisse Oct 12 2012, 08:14

1 больше нравиться, мне кажется и лучше.
Вопрос: а как несколько городов? Для каждого города свои точки или одни точки на весь модуль?

Автор: denis0k Oct 12 2012, 17:21

Цитата
а как несколько городов? Для каждого города свои точки или одни точки на весь модуль?
Префикс тега вейпоинтов хранится локалкой на локации. Можно один набор на весь шард, можно по несколько на город. Но из-за квадратичной сложности алгоритма поиска пути лучше все независимые друг от друга пути делать разными наборами.

Автор: Flaristan Oct 12 2012, 19:25

Цитата(denis0k @ Oct 12 2012, 07:16) *
Не вижу ничего сложного unsure.gif
Тогда советую поиграть самому в то, что делаешь. smile.gif

Автор: denis0k Oct 12 2012, 22:10

Ты не поверишь, но я у себя всё это обкатываю.

Автор: Flaristan Oct 14 2012, 03:19

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

Автор: PaiNt Oct 14 2012, 05:24

Цитата(Flaristan @ Oct 14 2012, 11:19) *
Дело в банальном не ощущении геймплея изнутри. Чтоб хорошо делать для игроков, а не для себя – нужно играть в то, что сделал.

Мне нечто подобное всегда рекомендует начальник, когда я проектирую интерфейс пользователя в какой-то системе smile.gif.

Автор: denis0k Oct 14 2012, 08:54

Я конечно всё понимаю, но какой геймплей может быть в десятке бродячих городских коммонеров? smile.gif Вот если я возьмусь переписать боевой ИИ, тогда да, влияние на геймплей будет налицо.

Автор: Flaristan Oct 14 2012, 10:16

Если в твоем модуле весь геймплей будет заключаться в проработанном балансе классов и системе прокачки – то конечно да, АИ гражданских неписей никакой роли играть не будет (собсно тут даже проще, если его вообще не будет и НПС будут как плейсеблы тупо стоять). А если уж контент будет направлен на создание атмосферы (а больше не для чего не нужны такие заморочки в НВН над АИ НПС) – то тут стоящие вкопанными на своих местах НПС тоже лучше, чем застрявшие в стенах/дверях/плейсеблах или тупящие в неожиданных местах.

У меня в самом старте модуля стоит НПС чьи функции ограничиваются привлечением внимания игрока, разговором с ним и в качестве полезной нагрузки – подработка дворецким (закрывает калитку неподалеку от своего поста, если ее оставляют открытой). Естественно поставить и обкатать такого не составило большого труда, но за все время теста модуля пока я там игрался и тестил все сам – нашел кучу логических багов для этого НПС которых пришлось исправлять и дорабатывать его и без того простейшее АИ. Последний сбой например при выполнении определенных условий приводил к тому что этот НПС становился столбом у двери и отказывался возвращаться на свой пост. В игре такие оплошности разработчиков выглядят крайне некрасиво, а вы хотите нагрузить бедных НПС сложнейшими алгоритмами, от которых у них попросту все схемы перегорят и крыша съедет. И в итоге получатся город безумных кукол творящих непонятное – у меня как игрока такая атмосфера в игре например вызывает только подташнивания (сразу видится не фэнтазийный город со сказочными персонажами а набор тайлов с криво работающими скриптами). А таких НПС хочется милосердно добить чтоб не мучились (пользуясь случаем передаю привет всем Аменским коровкам biggrin.gif).

Автор: Melisse Oct 14 2012, 11:51

denis0k
Возьмись пожалуйста за боевой АИ! Онегай!!!! wizard.gif

Автор: denis0k Oct 14 2012, 14:57

Цитата
Если в твоем модуле
У меня нет модуля. Я просто ради интереса занялся тем, чем хотел заняться давно - ИИ. Пригодится кому (при условии отсутствия багов конечно) - пусть ставит, нет - я абсолютно ничего не потеряю smile.gif
Цитата
Возьмись пожалуйста за боевой АИ! Онегай!!!!
После этого, если не надоест и если будет время - займусь и боевым, уже в процессе появились даже идеи по организации отдельных моментов.

Добавил вечерком:
Вопрос производительности на данный момент закрыт. Кэширование и немного эвристики спасают отца русской демократии smile.gif Можно не только сохранять уже рассчитанные маршруты (что банально), но и использовать старые при расчёте новых. Т.о. только первые неписи что-то реально считают, а один хороший путь "из варяг в греки" вообще способен снабдить живительным жизненным опытом половину города smile.gif Полный расчёт пути при 63 точках на 3х локациях у меня занимает около 100мс, если есть что-то подходящее в кэше - 1-2мс.

Автор: Flaristan Oct 14 2012, 20:09

Ну, таких работ полно на ваулте – дело в том, что кусочки нужны только тому, кто клеит мозаику.
К тому же это минус для работы – система получится совершенно не опробованной на деле, ибо не будет учтена куча бытовых нюансов.
Хотя конечно хозяин – барин.

Представляю как дико будет выглядеть когда полгорода НПС будет устраивать такой флэшмоб. biggrin.gif А еще кстати использование уже готовых шаблонов всегда плохо тем, что при изменении исходных данных шаблоны удачных решений автоматически становятся неудачными.

Автор: denis0k Oct 14 2012, 22:14

Отказался от тегов и приоритетов в пользу распределённого рандома - алгоритм выбирает сначала из точек, где никого нет, потом - где есть только один нпс smile.gif Мне показалось, что так гораздо проще и равномерней заполняются места интереса smile.gif Иначе рандом глюканёт, и будет полгорода в кабаке. Для флэшмобов напишу отдельный костылик, позволяющий по команде сгонять народ в любую точку smile.gif

Автор: Melisse Oct 14 2012, 22:37

А общаться нпс будут? или просто - приходят, выпили, ушли... пришли, помолились ушли... не будет такого - типа шли шли, а потом бах встретились и давай чесать языком, сплетни..., а тут игрок ага "новая тема для разговора" (!) smile.gif Я мечтаю да?)

Автор: denis0k Oct 14 2012, 23:18

Взаимодействия написать несложно, но именно диалоги меня смущают. В долгосрочном периоде это выльется в "я раньше тоже бла бла бла, но потом мне прострелили колено" от каждого встречного smile.gif В дьябле у неписей в городе есть готовые фразы, я их уже наизусть знаю, что бесит с определённого момента, уж лучше был молчали.

Более менее разумный выход - сделать базу из 300+ коротких диалогов (если сделать с макросами, фактически их будет меньше), чтобы в пределах пары дней они хотя бы не повторялись, но всё равно будет не фонтан. Да и вряд ли кто-то сходу напишет столько текста.

Автор: Melisse Oct 14 2012, 23:28

Хотя бы просто взаимодействие, с видимостью диалога типа: *разговаривает*, *смеется*, *умоляет* и тд smile.gif, а то как буратины, без общения smile.gif

Диалоги можно придумать... просто время нужно. Хотя, в принципе можно открыть любой учебник языка и писать оттуда, чуть изменяя. Время и место другое, но люди - всегда люди и говорят о насущном: еда, погода, родня, деньги, женщины/мужчины, дети, работа, хвастаются покупками, сердечные дела, лошади и скот, религия. Из персональных можно было бы сделать - события или слухи, связанные с местом (если житель местный) или сезонные время - сбор урожая, или посев...."сей год мол бла-бла-бла". Перед праздниками - о праздниках и о ярмарках, когда турниры идут - про турниры smile.gif
А представь, если бы НПС-торговцы, когда встречали игрока и видели, например, что у него здоровье стремитсья к 0, предлагали бы ему купить бутылочки со снадобьем smile.gif))

Автор: denis0k Oct 15 2012, 07:36

Отдельные элементы сделать конечно можно, но вот полноценные разговоры - нет.

Автор: Flaristan Oct 15 2012, 19:41

Почему собсно нет? – Придумать можно кучу всего, было бы желание:
(встречаются два НПС)
- Привет (имя встречного НПС)!
- Здоров (имя заговорившего НПС).
- Как тебе (текущий сезон года) в этом году?
1) - (если дождь/снег) Хреновая (текущий сезон года), говорят в (название ближайшего населенного пункта) (погода в ближайшем населенном пункте). (если погода такая же) [Значит почтальона/молочника/коробейника сегодня не будет – пойду в таверну, хоть выпью!](иначе)[Может переехать в (название ближайшего населенного пункта) жить? *смех* Надо об этом за кружечкой эля подумать.]
2) - (иначе) Хорошая (текущий сезон года) погодка, говорят в (название ближайшего населенного пункта) (погода в ближайшем населенном пункте). (если погода такая же) [Значит почтальон/молочник/коробейник сегодня в таверну заявится выручку обмывать – пошли ему там стул нагреем!](иначе)[Значит почтальона/молочника/коробейника сегодня не будет – пойду в таверну, хоть выпью!]
- А че, пошли – выпьем! /идут вдвоем в таверну бухать/

Получается отличный интерактивный диалог двух деревенских пъянчуг, которые готовы в любое время года сообразить на двоих или троих (как повезет) в местной таверне, тем самым создавая настроение окружающим, делая это более интересным способом, чем заученными доморощенными фразочками. К тому же услышав их разговор, игрок может узнать ценную информацию о текущей погоде в (ближайшем населенном пункте). biggrin.gif

А вообще я бы для анимации «буратин» использовал только звуки и анимации моделей – текст только в том случае если игрок подходит к НПС на определенное расстояние. Потому что кроме того что одни и те же фразочки в городах за(дол)бывают, это еще нехило мешает отыгрышу, засоряя эфир.

Автор: denis0k Oct 15 2012, 20:19

Это прикольно раз 10, не более. Когда мимо них будешь бегать день за днём, это вынесет весь мозг, т.к. любой адекватный человек увидит за этими фразами шаблон.

Сделать какие-то мини-ивенты, которые при определённых условиях (необычная погода, особые игроки в таверне в особое время и т.п.) будут запускаться - это одно, но вот постоянное наполнение локации повторяющейся болтовнёй - убивает. Особенно это будет заметно, когда у вас в таверне диалог между игроками, и каждые 10 секунд чат разрывают буратины своими "приветкакделагобухать".

Автор: Flaristan Oct 15 2012, 22:07

Поэтому я за то, чтоб они молчали (улыбались и махали издалека) пока специально не подойдешь послушать, о чем они говорят.
Про «погоду» иногда тоже полезно узнать, а если это будут реально стоящие сведенья (сплетни о том, что актуально происходит в мире модуля) – то шаблоны уже не будут так маячить, потому что внимание будет на другом.
Особенно если это не диалог перезапускающийся каждые пять минут, а реально отскриптованный ежедневный эвент (2 НПС бродят по городу пока не встречаются случайно или неслучайно друг с другом, перекидываются этими фразами после чего идут в таверну бухать скажем до часу-двух игровой ночи и после чего либо отрубаются либо бредут по домам/отрубаются в процессе этого).
Или представьте себе ваш друг сказал, что он пойдет бить троллей на местное болото, вы заходите в городскую таверну спустя полчаса, а там за барной стойкой НПС обсуждают как какой-то чудик на болоте выкосил почти всех троллей, и что теперь местные друиды обеспокоены за их популяцию. Было бы круто использовать такую таверну в игре по назначению, чтоб к примеру банально найти себе «работу».

Автор: denis0k Oct 16 2012, 07:32

Было бы круто, если бы на сервере всегда было 5+ игроков и 1+ дм smile.gif Все эти вопросы с костылями сразу отпадают.

Цитата
Или представьте себе ваш друг сказал, что он пойдет бить троллей на местное болото
За 4 года в нвн ни разу не видел такого. Задроты с неписями не говорят, а ролевики не ходят на троллей ради геноцида.

Автор: Rewazer Oct 16 2012, 08:34

Цитата
Samin Gorino: Это вообще было нечто... НПС подошел к игроку (0 внимания), заговорил с ним (0 внимания), толкнул его (ударил на 2-3) - только тогда игрок обратил внимание - ударил НПС в ответ, потом еще погонялся за ним и убил... а после пошел дальше качаться на троллях, ни слова не сказал.
http://nwn.name/501

Автор: Melisse Oct 16 2012, 10:42

Rewazer фига себе smile.gif)
от туда же smile.gif))

Цитата
denis0k: А дело не в деньгах, просто душу греет, когда на твоём сервере человек 30 играет безвылазно. Можно по-всякому усложнять прокачку, ослаблять заклинания (и делать прочие фиксы "по имя рп", "для атмосферы фэнтези", "по букве дид" и т.п.) и смотреть, как они развозят сопли по форуму, но всё равно день за днём заходят на сервер и фармят, фармят и фармят. Ты им откровенно палки в колёса вставляешь, а они всё равно наркоманят сутками, прогуливают работу и универ, возможно даже вылетая оттуда, перестают гулять с друзьями и ещё всячески ломают свою же жизнь. Ты вешаешь на исааки спас и урезаешь в 2 раза дроп, а на том конце кто-то бросает жену, чтобы та не мешала бить мобов в 4 раза больше обычного ради заветного пояса+6 силы. Чувствуешь нечто божественное? Это круче каких-то там денег

smile.gif

Автор: Flaristan Oct 16 2012, 13:46

Цитата(denis0k @ Oct 16 2012, 07:32) *
Было бы круто, если бы на сервере всегда было 5+ игроков и 1+ дм smile.gif Все эти вопросы с костылями сразу отпадают.

За 4 года в нвн ни разу не видел такого. Задроты с неписями не говорят, а ролевики не ходят на троллей ради геноцида.
Да было такое и на Экзисе, только если там ДМ тебя в «ЧС» отправит то уже никакие костыли не помогут, равносильно как и права игрока которые у нас даются лишь для удовлетворения ЧСВ ДМов, чтоб можно было всегда их ограничивать… ну это типа – «я ДМ, я не хочу ничего решать... я хочу доминировать властвовать и унижать», и в цитатнике подобное про пингвинить, бутить и банить есть. А еще было такое на Амене, только там лица все одни и те же, декорации не меняются годами и в общем ничего нового – так что и получается, что дело далеко вовсе и не в этом.

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

Цитата(Melisse @ Oct 16 2012, 10:42) *
фига себе
Это нужно быть одновременно в шкуре и ДМа и игрока, чтоб понять, что ничего такого в этом нет. На днях наблюдал такую же картину у себя на сервере. Правда я не разговаривал с игроком, а попробовал обратить его внимание на нужное место, вселившись в крыску – в остальном все совершенно аналогично, естественно ничего не вышло, и он ее тупо убил. Представьте себе – идете вы по чуть ли не пустынной местности, вокруг тишина и только «сверчки стрекочут»… В общем предоставлены сами себе полностью. Решаете отойти от компутера на пару минут (потому что сверчки - это конечно безумно интересно, но вы не в матрице) – возвращаетесь, а там персонаж почему-то не в том месте где вы его оставили и рядом еще чейто труп. «Фигасе» - думаете вы себе, пожимаете плечами и идете туда куда собирались прежде чем отойти. biggrin.gif
Мораль сей басни такова – изобретайте люди добрые системы, в которых видно, когда игрок отходит от своего персонажа, даже если он делает это не предупреждая тех, кто в этот момент рядом с ним. В НВН2 у буржуев есть самопальная надпись толстыми желтыми буквами «A F K» над персонажем которую можно выставить, чтоб тебя так не пинали. В НВН1 у буржуев опять же есть скрипт, который самопроизвольно садит персонажа на пол, если он ничего не делает какое-то время в игре. Это так же помогает сориентироваться. …И уж точно (как это ни прискорбно) ДМ там не будет лупить не отвечающего ему игрока каким-нибудь левым неписем, чтоб нарваться на его автоаатаку и потом смешно бегать от его персонажа. biggrin.gif

Автор: denis0k Oct 16 2012, 17:18

Флэр, я был игроком, я дмил, со мной друзья дмили - всё было нормально. Только ты на каких-то фашистов попадаешь smile.gif Хотя на амене меня на форуме и забанили за спор о скиллпоинтах, но там был всего один неадекват, который через неделю со словами "я ухожу, отговаривайте" всё равно свалил.

Цитата
Кстати у тех же буржуев такого понятия как «задротство» нет вообще – есть термин «гриндинг»
Nerd. Выражает образ ботана без личной жизни, но со сколиозом и в очках. Такой может как олимпиады по математике выигрывать, так и иметь 10 эльфов 80го уровня. Задрот по-нашему.
Не отрицаю, что нвнщики могут не использовать это слово, т.к. у них дидшная аудитория несколько старше - на западе дид в массы вошло в 80х, а у нас в 2000х, и то не особо. Но факта оно не отменяет smile.gif

Автор: Flaristan Oct 17 2012, 06:47

Ну почему только – не только… Видимо стаж игрока у меня значительно выше. smile.gif
На наших шардах банов у меня наверно штуки 4-5 только игровых, на буржуйских – ни одного.
Там же термина «nerd» я не слышал ни разу, зато слышал термин «addict» (зависимый) и то от одного игрока по отношению к самому себе (причем к задротству именно манчеватого толка он отношения не имеет никакого). Собсно там вообще неигровых разговоров мало (при желании можно и совсем их отключить). А в НВН2 в привате просто функционально общаться неудобно. Просто я к тому, что у них среди роливиков нет «наци» (которые считают любое маломальское проявление мачененизма не православным, карая его ждахадом) равно как и задротокача без отыгрыша на ролевом сервере.
…Ах да и устал еще повторять что НВН – пристанище не только фанов D&D (особенно теперь, когда оно уже не популярно), а и фанов НВН.

Автор: PaiNt Oct 17 2012, 07:23

Цитата(denis0k @ Oct 17 2012, 01:18) *
Nerd. Выражает образ ботана без личной жизни, но со сколиозом и в очках. Такой может как олимпиады по математике выигрывать, так и иметь 10 эльфов 80го уровня. Задрот по-нашему.

Мне кажется ты не совсем прав.. Не всякий задрот - есть Nerd, однако обратное утверждение может быть верно. Нерд - носит более "умственный, полезный, общий" характер и применительно не только к играм(в отличии от "Задрота"), тобишь Нерд - множество более широкое и включает "задрота", поэтому отождествлять понятия нельзя sad.gif.

А что касается буржуинов.. поиграв немного на Арелите могу сказать следующее:
-С точки зрения обще-ролевой атмосферы, красивой игры - они во многом лучше, и опытнее нас. Какие-то правила которые системообразующие, и нарушение которых рушит логику мира, они такое ощущение что соблюдают на подсознательном уровне. И главное для них почему-то "не западло" играть в театр одного актера smile.gif.
-С точки зрения "чувства юмора" (не специфического языкового, а просто смыслового) - производят впечатления какого-то "неразвитого" общества, такое ощущение что они вообще не шутят sad.gif, когда играешь там любое высказывание обдумываешь на этот момент.. вообще как-то "к жизни" персонажа, да и вообще к жизни они относятся странно..

Автор: denis0k Oct 17 2012, 07:57

Цитата
Мне кажется ты не совсем прав.. Не всякий задрот - есть Nerd, однако обратное утверждение может быть верно. Нерд - носит более "умственный, полезный, общий" характер и применительно не только к играм(в отличии от "Задрота"), тобишь Нерд - множество более широкое и включает "задрота", поэтому отождествлять понятия нельзя
Согласен. Если совсем дословно, то Флэр уже привёл - addicted. Но по опыту разных ситкомов, форумов и т.п. лично я замечаю как раз nerd smile.gif Если бы переводило центральное телевиденье, там был бы ботан, но любители всегда переводят как задрот, это более ярко и в 99% случаев подходит, т.к. основная масса этих "альтернативно одарённых" - как раз любители либо фэнтези в общем, либо рпг/дид в частности. Это тоже одна из частных хохм в ситкомах - если ботан, то потом всплывёт, что либо у него паладин 80го уровня в вов, либо маг 9го уровня в дид smile.gif Как-то так, в общем smile.gif
Цитата
На наших шардах банов у меня наверно штуки 4-5 только игровых
Ну поздравляю, ты побил все известные мне рекорды smile.gif
Цитата
Ах да и устал еще повторять что НВН – пристанище не только фанов D&D (особенно теперь, когда оно уже не популярно...)
...не популярно у нас.

Автор: Flaristan Oct 17 2012, 13:45

Цитата(PaiNt @ Oct 17 2012, 07:23) *
-С точки зрения "чувства юмора" (не специфического языкового, а просто смыслового) - производят впечатления какого-то "неразвитого" общества, такое ощущение что они вообще не шутят sad.gif, когда играешь там любое высказывание обдумываешь на этот момент.. вообще как-то "к жизни" персонажа, да и вообще к жизни они относятся странно..
Ну они просто весьма серьезно и основательно относятся к образу своего персонажа (одна только реализованная возможность отключать приват в купе с отключенным патичатом и правилом писать только отыгрыш в прочие каналы с запретом слешей - показатель). К тому же там наверняка есть много персонажей с пермосмертью (10 жизней) и многие не чураются отыгрывать рецессивные роли по отношению к доминирующим ролям других игроков, боясь (от лица персонажа) расправы от служителей темных культов и властей городов (которые есть другие игроки). Собсно стража и глазом не моргнет, убив вас в городе за отказ убрать оружие/снять капюшон или шлем/убрать обкаст/выйти из хайда или невидимости – а если вы ей нагрубите при этом, назначит нехилый штраф, за отказ оплаты которого или отсидку его в тюрьме вас могут не просто убить, а и объявить в городе нон-грато, что будет означать буквально то, что ваш персонаж уже не сможет зайти в ворота этого города до снятия «изгнания». Все это реализовано системно и во власти других игроков, которые играют собственно власти и стражу городов. А города предоставляют гражданство, возможность участвовать в их политической жизни (вплоть до выборов и баллотирований на главенствующие должности) и порой еще и воюют между собой. И такие эпизоды как встреча с практикующим некромантом ака ПМ (получить возможность качать которого можно только у ДМ) там вполне могут закончиться смертью или костром (в зависимости кто окажется круче, хотя как правило добро там в конце концов всегда зверски побеждает). В общем, все очень серьезно. smile.gif

Цитата(denis0k @ Oct 17 2012, 07:57) *
...не популярно у нас.
Как-то у себя в городе на стене одного из домов с огромным удивлением обнаружил рисованную рекламу какой-то мелкой компании, уже не помню какой. Долго стоял и моргал на большую круто нарисованную копию Арибет из официального постера. biggrin.gif А относительно недавно мне сказали, что видели в общественном транспорте другого города рекламный плакат НВН. smile.gif Так что это все заблуждение.

Автор: Anakondar Oct 18 2012, 13:09

denis0k Хочешь новый челендж?

Сейчас пишу поведенческий скрипт для игрока. Задача формулируется достаточно просто: нужно написать скрипт default примерно такого вида:

Neverwinter Script
void main()
{
    if (GetLocalInt (OBJECT_SELF, "ai_mod"))
    {
        ExecuteScript ("creature_heartbeat", OBJECT_SELF);
    }
    else
    {
    }
}
Только вместо "creature_heartbeat" должно быть что-нибудь более адекватное. Игрок должен ходить по локации(-иям), делать какие-то действия (зайти в таверне потусить, дверь открыть\закрыть, сесть отдохнуть, приветствовать встречных НПС, отразить нападение или убежать, поднять предмет и т.п.)

Для интереса попробовал вот такую конструкцию
Neverwinter Script
void main()
{
    if (GetLocalInt (OBJECT_SELF, "ai_mod"))
    {
        if (!GetIsInCombat()) ExecuteScript ("x2_def_heartbeat", OBJECT_SELF);
        else ExecuteScript ("x2_def_endcombat", OBJECT_SELF);
    }
    else
    {
    }
}

В мирное время всё отлично, даже самописная часть подбора айтемов, отпирания контейнеров и воровства. А вот в бою...
Шифтер в форме кастует заклы из друидского спеллбука и не тратит их. Если заклов нет, то превращается из формы в форму, пока они не закончатся.
Файты ведут себя более адекватно: нормально юзают дизармы всякие. Однако начинают бежать в бой как-то не сразу, 2-3 раунда тупят.

Автор: denis0k Oct 18 2012, 17:40

Зачем?

Автор: Anakondar Oct 19 2012, 00:30

Чтоб и для игроков те же правила работали. Система устойчива, если хаотическое воздействие не выводит её из равновесия. А что может быть хаотичнее живого разума? К тому же, для НПС писать очень просто: там на каждое событие есть свой скрипт. Предусмотрел в нём круг задач и реакций - и ву-а-ля. А у игроков всего один скрипт (ну не считая тех, которые модульные: дес, даинг, рест, левелап, энтер, лив, респаун...). Написать его так универсально, чтоб полноценно работал за все другие - это мастерворк! Ну и потом же можно и обратный процесс: пихать дефолт в монстров. Это красиво, я считаю.

Автор: PaiNt Oct 19 2012, 02:25

Кстати поделюсь идеей если конечно не боян.

Есть в дефолтной библиотеке NWScript такая замечательная функция как "ExecuteScriptAndReturnInt", короче обертка стандартной ExecuteScript, но с возвращением значения, т.к. щас на работе, листинг кода не приведу, попробую объяснить так.

Короче используя эту функцию очень удобно выполнять скрипты, количество которых заранее неизвестно..
Наример класически - мне надо наделать кучу скриптов на активирование предмета..
есть разные пути - расковырять стандартый x2_mod_def_act, написать туда кучу строчек, или опять-же вставлять туда экзекут "своего" скрипта. но это решение будет требовать каждый раз копаться в коде.

Можно сделать в x2_mod_def_act блок-цикл, который поочередно (можно взять для безопасности макс-итерацию 100 допустим) запускает скрипты вида "ud_act_"+[#] функцией "ExecuteScriptAndReturnInt", и если натыкается на невозвращение нужного значение этой функции то "на будущее" устанваливает макс-итерацию соотвтствующей позиции прерывания цикла.

Что нам это дает? - можно создавать скрипты активирования вещи просто назвав их "ud_act_"+[#] , и дописав в конец строчку "об возвращении значения"


чтото подобное я делал в системе достижений sad.gif http://amen.nwnvault.ru/forum/index.php?act=Attach&type=post&id=1983

ну и естественно эту методику можно применить и на перцепшены, хертбреты и так далее.

Автор: denis0k Oct 19 2012, 07:33

Anakondar, не вижу смысла писать скрипт на игрока. Он же игрок, сам умеет персонажем двигать smile.gif

PaiNt, не вижу смысла плодить лишние сущности smile.gif Всё можно сделать одним скриптом. К тому же, что касается именно активации итемов, можно просто писать скрипт с тегом шмотки, нвн сам найдёт и запустит этот скрипт smile.gif

Автор: Anakondar Oct 19 2012, 07:47

Ок, как такой вариант: игрок знает, что должен попасть из точки А в точку В, маршрут этот он проделывал миллион раз. Но бежать там сотню локаций. Почему бы не запустить на это дело автомат, который вычислит путь доведёт туда игрока? Не каждый же раз портом или телепортом можно воспользоваться, да и не в каждой деревне они есть.

Автор: PaiNt Oct 19 2012, 11:30

Цитата(denis0k @ Oct 19 2012, 15:33) *
PaiNt, не вижу смысла плодить лишние сущности smile.gif Всё можно сделать одним скриптом. К тому же, что касается именно активации итемов, можно просто писать скрипт с тегом шмотки, нвн сам найдёт и запустит этот скрипт smile.gif

Во первых стандартные тагбэйсед скрипты не различают(по дефолту) взял ли ты в инвентарь, или активировал предмет, они запускаются и для того и для того.
Во вторых.. ситуация допустим.. у меня есть предметы типа "еда" - они имеют разные теги(они используются не только для активации, а также в других системах), так что? мне получается нужно используя стандартный тагбейсед систему создать кучу (а вариантов еды может быть и 10 и 20) скриптов сущностей на каждый тег, которые при активации делают совершенно одно и тоже? или же я создам скрипт(ud_act_1) для этого типа предметов в котором я не ограничен как узнать что предмет относится именно к типу "еда".

Автор: Melisse Oct 19 2012, 11:40

PaiNt
А не проще сделать достижения через БД? ... меньше циклов - проще жизнь

Автор: PaiNt Oct 19 2012, 12:16

Цитата(Melisse @ Oct 19 2012, 19:40) *
PaiNt
А не проще сделать достижения через БД? ... меньше циклов - проще жизнь

я ее так и не настроил! vava.gif .. да и думаю в задаче "система достижений" _где хранить_ данные отнюдь не главное sad.gif

Автор: denis0k Oct 19 2012, 17:25

Цитата
Ок, как такой вариант: игрок знает, что должен попасть из точки А в точку В, маршрут этот он проделывал миллион раз. Но бежать там сотню локаций. Почему бы не запустить на это дело автомат, который вычислит путь доведёт туда игрока? Не каждый же раз портом или телепортом можно воспользоваться, да и не в каждой деревне они есть.
Путешествие - часть игровой механики. Равно как и кач тот же, его-то ты не предлагаешь поставить на автомат, раз качаться приходится постоянно и по одному алгоритму smile.gif Если вдруг какая-то система так и просит заменить себя ботом, и неважно какая - передвижение, кач, крафт и т.п., - надо менять саму систему, а не городить костыли.

В данном случае я рекомендую вводить такси/телепорты и ездовых животных.
Цитата
ситуация допустим.. у меня есть предметы типа "еда" - они имеют разные теги(они используются не только для активации, а также в других системах), так что? мне получается нужно используя стандартный тагбейсед систему создать кучу (а вариантов еды может быть и 10 и 20) скриптов сущностей на каждый тег, которые при активации делают совершенно одно и тоже?
Я для этого использую обычный модульный скрипт, в котором есть if на кусок тега. Очень удобно smile.gif Кромсаю тег на части, как правило левая часть есть тип вещи, правая - подтип/номер. Если заранее проработать систему именования вещей, можно решить очень много вопросов.

В качестве оффтопа - теги экипировки ещё сложнее, для той же брони там и тип доспеха, и материал, и базовый энчант, и номер - можно простым getsubstring выдернуть из шмотки целую таблицу свойств.
Цитата
да и думаю в задаче "система достижений" _где хранить_ данные отнюдь не главное
Это скорее вопрос удобства и скорости обработки данных. В бд можно одной строкой делать +1 тем же очкам или опять же одной строкой выдёргивать поисковые результаты, собранные по нескольким критериям. Например, в сабже для поиска непосещённой точки с большим/меньшим расстоянием надо по идее писать цикл на проверку всех точек, но разработчики разных субд сделали это за нас, причём максимально оптимально smile.gif Одна строка - и вуаля. Причём, если в хранении данных используются те же деревья, при поиске не будет тупого перебора всех значений, а значит с бд такой скрипт будет работать быстрее, чем без неё (если конечно в базе не пара значений).

Автор: Flaristan Oct 19 2012, 19:54

Цитата(Anakondar @ Oct 19 2012, 07:47) *
Ок, как такой вариант: игрок знает, что должен попасть из точки А в точку В, маршрут этот он проделывал миллион раз. Но бежать там сотню локаций. Почему бы не запустить на это дело автомат, который вычислит путь доведёт туда игрока?
Улучшенную версию такой системы уже давно изобрели и признали неинтересной – называется «рычаг экспы». Смысл игры в игру – это игра, он теряется если пытаться заменить игру чем-то еще.

Цитата(PaiNt @ Oct 19 2012, 11:30) *
Во первых стандартные тагбэйсед скрипты не различают(по дефолту) взял ли ты в инвентарь, или активировал предмет, они запускаются и для того и для того.
Во вторых.. ситуация допустим.. у меня есть предметы типа "еда" - они имеют разные теги(они используются не только для активации, а также в других системах), так что? мне получается нужно используя стандартный тагбейсед систему создать кучу (а вариантов еды может быть и 10 и 20) скриптов сущностей на каждый тег, которые при активации делают совершенно одно и тоже? или же я создам скрипт(ud_act_1) для этого типа предметов в котором я не ограничен как узнать что предмет относится именно к типу "еда".
Можно использовать стандартную систему и сделать столько скриптов, сколько используется соответствующих итемов в игре – можно использовать стандартные события в свойствах модуля и сделать на нужные (использование или получение итемов или экипировка и т.д.) по одному скрипту который будет включать нужное кол-во блоков по 1 на итем. Ставить нужные уточняющие заглушки не там ни там труда не составляет.
Например у меня в модуле я использовал для «уникальной силы предмета» такую конструкцию:..
Код
void main()
{
object oItem = GetItemActivated();

if (GetTag(oItem)=="tag001")
{
//условие описывающее все последствия и возможные варианты использования – тут можно включить такие варианты как использование однотипных итемов с разными тагами (например фляга с водой или бутылка воды) перечислив их таги через «или» в заглавном «если» блока, или описать всевозможные последствия использования итема на объекты с различными тагами или просто объекты различного типа внутри блока (если использовать бутылку с водой на себя или другого персонажа – он попьет, если на умирающее существо – это приведет его в чувства, если на землю – персонаж выльет на нее всю воду и т.д.), или любые другие заглушки которые вы только сможете придумать//
return;
}

}

Автор: PaiNt Oct 20 2012, 02:24

Мопед не мо.. Я просто обозначил свой подход к программированию таких случаев при активации вещей smile.gif, я такой человек что неизвестно какой код я буду писать завтра smile.gif, поэтому и действую таким образом, ибо так получается независисмее чтоли, и более "встраимее" в уже существующие системы.

Цитата
Это скорее вопрос удобства и скорости обработки данных. В бд можно одной строкой делать +1 тем же очкам или опять же одной строкой выдёргивать поисковые результаты, собранные по нескольким критериям. Например, в сабже для поиска непосещённой точки с большим/меньшим расстоянием надо по идее писать цикл на проверку всех точек, но разработчики разных субд сделали это за нас, причём максимально оптимально Одна строка - и вуаля. Причём, если в хранении данных используются те же деревья, при поиске не будет тупого перебора всех значений, а значит с бд такой скрипт будет работать быстрее, чем без неё (если конечно в базе не пара значений).
я понимаю когда там нетривиальные запросы, типа твоей сетки вейпойнтов, а в подобной системе(достижения) счетчики довольно простые(запрос-имя > ответ-значение), и я чето не очень вижу случая когда придется по каким-то критериям делать выборку нескольких счетчиков.

ладно не буду больше уводить уже уведенный топик в сторону smile.gif

Автор: Flaristan Oct 20 2012, 20:59

Ну, я скрипты пишу так же и часто редактирую или изменяю уже существующие скрипты и системы. Доступные в авроре системы скриптования мне в этом не мешают – эвристику и здравый смысл никто не отменял.

Автор: edwardkz Oct 21 2012, 17:57

[quote name='PaiNt' post='142898' date='Oct 17 2012, 07:23']-С точки зрения "чувства юмора" (не специфического языкового, а просто смыслового) - производят впечатления какого-то "неразвитого" общества, такое ощущение что они вообще не шутят sad.gif, когда играешь там любое высказывание обдумываешь на этот момент.. вообще как-то "к жизни" персонажа, да и вообще к жизни они относятся странно..

Ролевой шард ? Из западных играл только на экшенах, и наверное правильно сделал smile.gif, там все в порядке с чуством юмора, но да они немного отличаются и кое в чем гораздо в лучшую сторону.

Автор: denis0k Oct 21 2012, 21:48

По сабжу - бродящие туда-сюда гоблины, разделяющиеся на перекрёстках аки истребители на задании, - просто ад smile.gif На очереди подключение кастомных скриптов точек интереса и оптимизация для локаций, где нет игроков.

Автор: Flaristan Oct 22 2012, 20:23

Изобретение велосипеда это. PW итак прекрасно работает – даже без ДМ. Вот к примеру на Арелифе прописано АИ коммонеров (они ходят по городу сами между локаций и по помещениям, используют объекты, кузнец кует заготовки для мечей в кузнице и т.д.), но я сколько играл, внимания на них особого не обращал. По сути что они так ходят, что на месте стоят (НПС-торговцы) – без разницы. Игру исключительно игроки там делают, а НПС декорации, к которым как и положено внимания особого не привлекается. Когда во время отыгрыша (хотя какой там «отыгрыш» – это скорее правило игры, так что правильнее сказать «во время игры») говорят, что тебе нужно подойти поговорить с какой-то ключивой фигурой (будь то бармен, стражник или верховный друид, консул города) – не имеется в виду, что ты должен найти какого-то особого НПС и, подождав пока в него вселится ДМ, поболтать с ним о чем нужно. Всегда имеется в виду какой-то игрок, играющий эту роль. А выпады ключевых ролей в реальную жизнь прекрасно лечатся «текучестью кадров». Онлайн-игра все-таки: лучше привлекать людей в игру, а не стараться их заменить компьютером.

Автор: denis0k Oct 22 2012, 22:07

Мы уже все поняли, что тебе это не нужно smile.gif

Автор: Flaristan Oct 23 2012, 02:44

Если вспомнить, что по большей части относительно НВНа я игрок, нежели разраб – соответствующие выводы думаю сделать не сложно.

Автор: denis0k Oct 23 2012, 07:21

Абсолютно неважно же, почему это тебе не интересно smile.gif Потому что ты игрок, разраб, гомо, гетеро, мальчик, девочка, мать троих детей или главный ходок района... Тебе просто не интересно. Раз так - пройди, пожалуйста, мимо. В твой же топик с шардом никто не заходит сказать "неинтересный велосипед", хотя он не интересен сразу всем здесь присутствующим.

По сабжу: если ничего не случится, на неделе будет первая вменяемая версия.

Автор: Anakondar Oct 23 2012, 08:32

Цитата(denis0k @ Oct 19 2012, 18:25) *
Путешествие - часть игровой механики. Равно как и кач тот же, его-то ты не предлагаешь поставить на автомат, раз качаться приходится постоянно и по одному алгоритму smile.gif Если вдруг какая-то система так и просит заменить себя ботом, и неважно какая - передвижение, кач, крафт и т.п., - надо менять саму систему, а не городить костыли.

В данном случае я рекомендую вводить такси/телепорты и ездовых животных.
Есть и телепорты, и такси, и "путь домой", и порты, и шлюхи - всё с абсолютно различной механикой перемещения. Верховые животные также присутствуют. (Я не предлагаю написать аи для какча только потому, что тема про гражданский аи. Хотя я лично не разделяю аи на гражданский и военный, аи должен быть достаточно адекватным в любой ситуации, а не только в половине случаев).

denis0k Вопрос не в том, нужно ли это или чем это можно заменить. Вопрос в том, как лучше это сделать. Это не относится к какому-либо изменению игровой механики, а чисто программистский и логико-дизайнерский челендж. Не нужно говорить, что мой велосипед неинтересный, тебе же никто не говорит, что у тебя "неинтересный велосипед" (хотя нет, говорят, но не я же).

Задача родилась не просто так, а из значительных раздумий и обсуждений. Приводить их не буду.

Поведение\перемещение монстров и нпс настраивается в основном вейпоинтами, тегом существа, локальными переменными на нём и записями в базе данных. У кого не так - поправте меня. Но мы впролне можем забыть (специально или случайно) поменять тег существу, выставить вейпоинты, инициализировать локалки и перетащить базу с другого компа. При этом работоспособность модуля и скриптов не должна пострадать. С игроками всё проще: тег мы менять не можем, локалки не сохраняем и т.п. Однако же система стабильно и, главное, логично продолжающая свою работу при повторном заходе после выхода игрока с сервера, равно как и другого стохастического воздействия разума на процесс её (системы) работы, вполне может считаться приемлемой.

Если уж на то полшло, можно ещё другую субзадачу сформулировать:
"Я - обычный игрок, любящий диалоговые квесты. Но я ненавижу участвовать в боях. Дайте мне файл default.ncs, поместив который в override я смогу пройти стандартные компании наблюдая красивые бои лишь как зритель."

Автор: PaiNt Oct 23 2012, 09:34

Цитата(denis0k @ Oct 23 2012, 15:21) *
По сабжу: если ничего не случится, на неделе будет первая вменяемая версия.


судовольствием затестю.

Автор: Melisse Oct 23 2012, 15:58

denis0k
Тоже с удовольствием гляну на досуге.

П.С. Я все таки лелею мысль, что ты глянешь так же и боевой аи smile.gif


Автор: denis0k Oct 23 2012, 17:37

Цитата
Хотя я лично не разделяю аи на гражданский и военный, аи должен быть достаточно адекватным в любой ситуации, а не только в половине случаев
В качестве оффтопа: скажи это биоварям smile.gif Простое использование lua (который специально пишут как встроенный ЯП в т.ч. для игр) вместо их велосипеда автоматически решило бы многие вопросы, но увы - для лечения томозов мне приходилось не только ставить разные скрипты животным, неписям и боевым мобам, но и разделять скрипты для кастеров и некастеров.
Цитата
Вопрос не в том, нужно ли это или чем это можно заменить. Вопрос в том, как лучше это сделать. Это не относится к какому-либо изменению игровой механики, а чисто программистский и логико-дизайнерский челендж.
Хорошо. Тогда решение такое - построить сетку вейпоинтов по дорогам и водить игрока через добавления в очередь действий действия передвижения. Но есть 2.5 взаимоисключающих нюанса:
1) если просто добавить, то любой клик мышкой, автоатака, тычок другого игрока и т.п. очередь сбросят, и придётся ждать следующего тика хб
2) это можно решить, заблокировав очередь, но тогда есть шанс, скажем, огрести smile.gif
2.5) наличие скрипта default - это выполнение его на каждом игроке на каждое его событие, я думаю это сотни тысяч или даже миллионы запусков в более менее долгосрочном периоде, 99% которых будут пустышками.
Цитата
Я - обычный игрок, любящий диалоговые квесты. Но я ненавижу участвовать в боях. Дайте мне файл default.ncs, поместив который в override я смогу пройти стандартные компании наблюдая красивые бои лишь как зритель.
С таким же успехом я могу сказать, что я тоже люблю квесты и хочу такой скрипт, который пройдёт за меня квейк. Стандартные кампании нвн - это дьяблоподобный экшен с диалогами на ролевую тему, sad but true, как говорится. Но есть решение! Создать воина, врубить ему godmode и тупо кликать на врагов. Для совсем ленивых, я думаю, на ютьюбе можно найти полное прохождение из раздела hands free smile.gif

Автор: Ilerien Oct 23 2012, 18:44

Цитата(denis0k @ Oct 23 2012, 07:21) *
По сабжу: если ничего не случится, на неделе будет первая вменяемая версия.
Будем посмотреть. smile.gif Лелею надежду, что мне эта разработка пригодится.

Автор: Anakondar Oct 23 2012, 18:56

Цитата(denis0k @ Oct 23 2012, 18:37) *
1) если просто добавить, то любой клик мышкой, автоатака, тычок другого игрока и т.п. очередь сбросят, и придётся ждать следующего тика хб
2) это можно решить, заблокировав очередь, но тогда есть шанс, скажем, огрести smile.gif
2.5) наличие скрипта default - это выполнение его на каждом игроке на каждое его событие, я думаю это сотни тысяч или даже миллионы запусков в более менее долгосрочном периоде, 99% которых будут пустышками.

Ждать тика не проблема. Я даже без переключателя на аи ставил в дефолт стандартные скипты существ. Выглядело вполне себе нормально: когда игрок действует сам, он не замечает вличния аи на себя, когда перестаёт - замечает, что перс начинает рандомволкаться и плейанимэйшенить и т.п.
А чем мешает запуск пустого скрипта? На 1000 мобов по 15 отнюдь не пустых скриптов, запускающихся по 2-3 каждый раунд, явно на несколько порядков больше нагружают сервер. К тому же, у меня дефолт и не пустой вовсе. И запускается он не на каждое событие (только на хб и дес), кстати, хоть и прописан везде.

Автор: denis0k Oct 23 2012, 19:20

Основная проблема системы - придётся сильно пилить напильником. Если передвижение, выбор цели, реакция на погоду и т.п. более менее универсальны и требуют разве что расстановки вейпоинтов и заполнения базы, то конкретные скрипты точек придётся писать отдельно. Пример: базовая система "доводит" непися, скажем, до храма и передаёт управление местному скрипту, который эн часов водит/молит/говорит непися, а потом возвращает управление базе. Вот этот кастом придётся писать самому шардостроителю.

Цитата
А чем мешает запуск пустого скрипта? На 1000 мобов по 15 отнюдь не пустых скриптов, запускающихся по 2-3 каждый раунд, явно на несколько порядков больше нагружают сервер.
Можно мне видео того, как 1000 мобов не вылетают в тми и не ложат сервер? Это же 1кк одних только перцепшенов.

Автор: Flaristan Oct 23 2012, 19:53

Цитата(denis0k @ Oct 23 2012, 07:21) *
Абсолютно неважно же, почему это тебе не интересно smile.gif Потому что ты игрок, разраб, гомо, гетеро, мальчик, девочка, мать троих детей или главный ходок района... Тебе просто не интересно. Раз так - пройди, пожалуйста, мимо. В твой же топик с шардом никто не заходит сказать "неинтересный велосипед", хотя он не интересен сразу всем здесь присутствующим.
Хы, ну да – не важно, если делать чисто для себя (пользуясь случаем передаю привет концепции «по 1 шарду на разработчика»). biggrin.gif
Было бы совсем не интересно – прошел бы. И это не у меня топик с шардом. wacko.gif

Автор: Anakondar Oct 23 2012, 23:05

Цитата(denis0k @ Oct 23 2012, 20:20) *
Можно мне видео того, как 1000 мобов не вылетают в тми и не ложат сервер? Это же 1кк одних только перцепшенов.

Вот, я уже считал тут статистику старого шарда: гоблинская пещера порядка 80 гоблинов; эльфийсуий дефенс около 60 лучниц; големник, болото, озеро - примерно 20 рыл; шахты - 13 охранников + прораб + 3 рабочих. Итого в среднем на обитаемых локациях по 30 мобов. Онлайн 28 игроков, по 2 игрока на локации. Итого 28/2*30=420 мобов. Плюс локации с Лидером и Смертью (которые не паузятся без игроков) и их охрана соответственно. Получается около 500 мобов: 500 хитбитов, 500 эндраундов, 2000 персепов в раунд. Держится нормально. Ещё хитбиты на плейсах нужно прикинуть, но их чуть меньше.

Автор: denis0k Oct 23 2012, 23:32

Цитата
которые не паузятся без игроков
Это ты так думаешь smile.gif Скрипты запускаются, это видно по логам, но вот половина функций не срабатывает. У меня вот пока без оптимизаций мобы должны ходить даже без игрока, но делают это через раз - они заходят в другую локу, там шуршат скриптами, но даже если зайти через 5 минут, как правило все или все, кроме одного, начнут идти прямо от двери, т.е. скрипты вроде как запускались, но эффекта не оказывали. Оптимизация-с.
Цитата
Получается около 500 мобов: 500 хитбитов, 500 эндраундов, 2000 персепов в раунд. Держится нормально.
Я-то думал... smile.gif 1000 мобов как 1000 мобов и 1000 мобов по десятку в локе - это две совершенно разные вещи. С разницей раз в сто. Но не спорю, 30 игроков столько тоже не накрутят.

К слову, если так хочется, систему под игроков переписать можно будет.

Автор: denis0k Nov 6 2012, 21:59

У меня тут столб с оптоволокном упал. И, судя по логам, придавил dhcp-сервер в километре от него smile.gif А потом через день пропал и аплинк, надеюсь это кто-то из монтажников на моей витой паре повесился. Инет дали только сегодня, ибо девушка на ресепшене долго не могла поверить жене, что 3 компа и роутер не могут одновременно поломаться, пока я сам не дошёл до их коморки и не объяснил всё на пальцах, после чего они 4 дня тянули провод через 3 этажа sad.gif

Итак.

Что есть: просто модуль из 3х локаций, по которому гоблины ходят как тараканы smile.gif Они спавнятся утром, бродят по целям, запускают единственный скрипт на точках интереса, уходят домой вечером и удаляются. Без игроков в локации неписи удаляются, но система по-прежнему продолжает считать положение мобов и спавнит их в локациях с игроком.

Что можно/нужно добавить: скрипты точек интереса. Поскольку это чистый кастом, я написал одну бессмысленную болванку и поставил на все точки. Но даже без них выглядит забавно.

Что я хотел бы добавить: нормальная генерация неписей, реакция на погоду, врагов, игроков, других неписей. Это должно быть сердцем системы.

Проблемы:
- Основная: на вин8 у меня нвн нещадно вылетает - на загрузке (50%, иногда по 5 раз подряд), на сворачивании, на потере фокуса в оконном режиме и на выходе. Последние три - с шансом 100%.
- Неосновная: из-за того, что пути проходят через разные локации, приходится проверять положение неписей и на модульный хб, и на вход в локацию. Впрочем, по профайлеру модульный хб с нехилым циклом срабатывает за пару милисекунд.

http://tauredor.co.cc/td_ai/td_ai_20121106.rar (33 кб, мод + дамп базы)

Автор: Flaristan Nov 7 2012, 14:03

Мне кажется такие эксперименты попросту нужно ставить не в НВН, для последнего нужны системы по принципу «все гениальное – просто» (с) иначе будет неиграбельно от лагов. smile.gif

Однако:..

Цитата(denis0k @ Nov 6 2012, 22:59) *
Что я хотел бы добавить: нормальная генерация неписей, реакция на погоду, врагов, игроков, других неписей. Это должно быть сердцем системы.

- генерация – в моем варианте есть «менеджер популяции» жестко привязанный к локации и моделирующий раз в сутки подконтрольный респ (для 1 конкретного НПС тут все может свестись просто к проверке существует ли объект в модуле и в случае, если нет – его воссозданию; для респа мобов им контролируется еще и прирост/текущее значение популяции на своей локации), сами же НПС/мобы не удаляются на момент «сна», а используют EffectDisappearAppear с длительностью эффекта равной длительностью «сна» криттера;
- реакция на врагов ИМХО не должна быть универсальной и прописываться согласно «квенте» криттера ибо АИ – это то по чему его будут «провожать» после встречи (например у меня крысы при ощущении врага на локации в пределах радиуса «обоняния» включают режим поиска, повышая свой шанс на обнаружение того, при обнаружении визуально или «обонянием» оценивают тактическую обстановку в радиусе обзора и если перевес на стороне крыс – нападают, отдавая команду об атаке своим в радиусе обзора, если перевес на стороне врага – бегут за помощью к своей точке респа ака «норе» и суммонят подкрепление, если смогут и это позволяет текущая популяция норы +/- мелкие нюансы… для другого вида хищников я буду писать новый АИ, лишь опираясь на этот как на пример, иначе все мобы будут различаться только аппеаренсом);
- реакция на погоду, дружественных созданий – это уже должно быть на самом заднем плане как последние штрихи уже готовой картины, ибо не основное но важные детали (например те же крысы имеют некоторые прописанные реакции на определенные условия – боятся света факела или дневного, впадая от первого во временную от последнего в постоянную прострацию… реагируют на разные типы мяса валяющиеся на земле как на приманку… при наступлении дня стремятся вернуться в свою нору на «сон»).

В общем это не сердцем системы должно быть, а сердцем модуля – как его автор сможет передать в деталях различные особенности игрового мира. Иначе будет просто еще одна тупая АИ-болванка.

P.S.: "ESET Smart Security заблокировал доступ к веб-странице. Страница находится в списке веб-сайтов с потенциально опасным содержимым." (с) wacko.gif

Автор: PaiNt Nov 7 2012, 14:53

Flaristan, что такое "криттер"?

Автор: Melisse Nov 7 2012, 15:00

denis0k
Скрипт на входе в локацию... почему там ты используешь GetObjectByTag ?

Автор: PaiNt Nov 7 2012, 15:30

denis0k, печально но посмотреть вживую навернео не смогу еще минимум неделю smile.gif
но в ходе небольшого просмотра в тулсете возникли некоторые вопросы которые не понял.
1. Точки интереса

Neverwinter Script
ExecuteScript(sPOIScript, oNPC);
в функции хождения по вейпойнтам - что это? имеется ввиду по смыслу что должен делать этот "sPOIScript"?

2. Планируется, или есть ли чтото типа "обертки" стандартных функций движений типа ActionMoveToObject(), ActionMoveToLocation() и т.д. которые будут использовать твою "сетку вейпойнтов" в просчете пути и движении?

Автор: Flaristan Nov 7 2012, 15:45

Цитата(PaiNt @ Nov 7 2012, 15:53) *
Flaristan, что такое "криттер"?
http://slovari.yandex.ru/critter/en-ru/#lingvo/ -_-

Автор: denis0k Nov 7 2012, 17:58

Цитата
иначе будет неиграбельно от лагов
Не лагает... Загрузка проца 0% почти всё время. Даже хб спустя 5 часов всё те же 6 секунд.
Цитата
генерация – в моем варианте есть «менеджер популяции»
Я имел в виду генератор внешности smile.gif Раса, пол, одежда, имя, работа, цели и т.п.
Цитата
сами же НПС/мобы не удаляются на момент «сна», а используют EffectDisappearAppear с длительностью эффекта равной длительностью «сна» криттера;
Ну тогда весь "сон" (при двухминутном игровом часе это с полчаса времени реального) продолжают шуршать скрипты, некрасиво.
Цитата
ESET Smart Security заблокировал доступ к веб-странице. Страница находится в списке веб-сайтов с потенциально опасным содержимым.
И касперский. Домен-то корейский, хацкерский smile.gif
Цитата
Скрипт на входе в локацию... почему там ты используешь GetObjectByTag ?
Это самый простой способ пробежаться по всем нужным объектам во всём модуле.
Цитата
ExecuteScript(sPOIScript, oNPC); в функции хождения по вейпойнтам - что это? имеется ввиду по смыслу что должен делать этот "sPOIScript"?
Это хертбит точки интереса. Непись приходит в точку и там каждые 6 секунд и до отмены исполняет этот скрипт. У меня он падает ниц и молится пару раундов smile.gif Тут же могут быть заказы в таверне, сон под осиной, прополка грядок и прочее. Потом скрипт возвращает управление основной системе, и непись уходит.
Цитата
Планируется, или есть ли чтото типа "обертки" стандартных функций движений типа ActionMoveToObject(), ActionMoveToLocation() и т.д. которые будут использовать твою "сетку вейпойнтов" в просчете пути и движении?
Даже не думал, если честно. В концепте системы им не нашлось места smile.gif Если на мобе висит пара локалок (старт, цель, текущее положение, путь), он и так на хертбите идёт куда надо. В принципе, нет ничего сложного в написании этих функций - нужно ими просто правильно выставить локалки, и моб сам пойдёт. Даже можно в качестве цели объект/локацию указать и внутри поискать путь до него/неё через точки. Надо?

Автор: Melisse Nov 7 2012, 19:56

Цитата(denis0k @ Nov 7 2012, 17:58) *
Это самый простой способ пробежаться по всем нужным объектам во всём модуле.

На вход в локацию каждый раз бегать по всем НПС в модуле - не напряжно? Это ведь не GetNearestOjectByTag()
Я к тому, что обычно на входе в локацию висит в скрипте куча всяких штук типа удаление багов аое и тд. и тп. в Краю лесов там погода висела и всякие эффекты субрас.

Автор: Flaristan Nov 7 2012, 20:00

О чем речь – модуль из трех локаций же. smile.gif Просто после такой загрузки неписей скриптами получится как у буржуев: для каждого полноценного РПшного игрового города нужно выделять отдельный сервер.

Генератор внешности – это уже ММОшные извраты пошли. о_О Могу порекомендовать сходить на Амен и посмотреть фасоны доспехов на рынках где ассортимент генерируется случайно вместе с внешностью. Где-то процентов 95% из них напоминают разнообразных пародистых попугаев. biggrin.gif Это все из той же категории вещей которые должны быть исключительно кастомными.

Никакие скрипты не шуршат при отсутствии игрока. Да и не думаю вообще что дисаппеар чем-то шуршит пока идет задержка. А если существо потеряется где-то в лимбо по дороге – трагедии там никакой не случится ибо на то есть «менеджер популяции» который постепенно восстанавливает численность респавна после геноцидов.

Автор: Melisse Nov 7 2012, 20:03

Цитата
если существо потеряется где-то в лимбо по дороге

при дисаппере-аппере оно не в лимбе, оно высоко поднимается вверх и там висит. Это можно и по анимации отследить в максе. Просто идет задержка перед падением - имитация для полетов драконов.

Автор: denis0k Nov 7 2012, 21:06

Цитата
О чем речь – модуль из трех локаций же.
Неважно количество локаций, важно количество городов и бродячих неписей в них. У меня их в районе 10, что неплохо для небольшого виртуального посёлка. Без труда можно и 20, и 30, если город большой, и они не будут по 5 штук у точки крутиться.
Цитата
Просто после такой загрузки неписей скриптами получится как у буржуев: для каждого полноценного РПшного игрового города нужно выделять отдельный сервер.
Это фича нвн - собери кучу игроков в одном месте и получи лаги. Подобные скрипты на несколько порядков слабее ИИ боевых мобов, не вижу проблемы как бы.
Цитата
Могу порекомендовать сходить на Амен и посмотреть фасоны доспехов на рынках где ассортимент генерируется случайно вместе с внешностью. Где-то процентов 95% из них напоминают разнообразных пародистых попугаев.
Лучше порекомендуй скриптеру амена выпрямить руки smile.gif
Цитата
Никакие скрипты не шуршат при отсутствии игрока.
Поставь вывод в лог в скриптах и запусти сервер без игроков. Будешь приятно удивлён.

Автор: PaiNt Nov 7 2012, 23:45

Цитата(denis0k @ Nov 8 2012, 01:58) *
Даже не думал, если честно. В концепте системы им не нашлось места smile.gif Если на мобе висит пара локалок (старт, цель, текущее положение, путь), он и так на хертбите идёт куда надо. В принципе, нет ничего сложного в написании этих функций - нужно ими просто правильно выставить локалки, и моб сам пойдёт. Даже можно в качестве цели объект/локацию указать и внутри поискать путь до него/неё через точки. Надо?

Я думаю это так или иначе понадобится каждому кто будет юзать твою систему smile.gif, может он не захочет использовать все ее возможности(типа самопроизвольного хождения НПС и т.д.) а только "эффективное" перемещение между локами.

Цитата(denis0k @ Nov 8 2012, 01:58) *
Лучше порекомендуй скриптеру амена выпрямить руки
smile.gif чтож ты так, ведь у скриптера Амена сегодня день рождения smile.gif

Автор: Flaristan Nov 8 2012, 12:47

Количество локаций неважно, если модуль рисовался по принципу «нужно чтоб по карте все было» - когда локации делаются исключительно для того, чтоб они были, по логике вещей между пунктом «А» и пунктом «Б» (полная чушь для РПГ на самом деле). А если каждая локация – игровая сцена, наполнение ее соответствующее, а следовательно от числа таких локаций загрузка модуля зависит прямо пропорционально.
10 неписей на деревню – это даже не деревенька, так перевалочный пункт какой-то. А если ко всем этим локациям добавить по несколько слоняющхся в них игроков (когда все будет работать и шуршать скриптами), а еще вспомнить что АИ слоняющихся в городах НПС это вообще система чуть ли не из ряда последних которыми украшают такие игровые сцены – то обязательно встает вопрос, стоит ли такая система своих ресурсов.

Игроки на моей памяти лагали исключительно своим числом только при активной боевке и заклинаниями/лошадями. В том же РП-городе нет ни первого ни второго к примеру. Если проблемы не видно – это не значит, что ее нет. Я вот с ней сталкивался при игре с подобными системами изнутри и, делая для себя, 10 раз подумаю «стоит ли оно того» и «нет ли варианта попроще/лаконичнее», прежде чем что-то подобное делать.

Скриптер Амена там не при чем – такова учесть («мертвый неживой труп») любой системы которая пытается заменить случайностью упорядоченность.

Что проще посчитать ящики с цементом путем складывания их в уме или путем складывания их в углу? Не шуршат, потому что в спящем режиме без игрока они.

Автор: denis0k Nov 23 2012, 08:15

Если в воскресенье не будет пейнтбола, попытаюсь добавить пару новых фич smile.gif

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)