![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#11
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Цитата Биовары пошли по пути вейпойнтов и локальных переменных заданных при создании существа, но тут уже только в этом 2 параметра которые нужно регулировать в разных местах вместо одного - уже плохо. Где-то на ваулте был такой интересный пакет. Там о хищниках и травоядных. Так вот хищники переодически прогуливались до точки, где собирались травоядные, по пути рандомно создавая случайные локации, по которым они пробирались. Если делать таким способом....Тормозить такой метод не будет? мне кажется если есть точка - то не сложно ее найти, чем генерировать каждые 6.0 сек случайную? Помниться в стандартных встречах если не поставить точку спавна, то она автоматом генерируется на удобном расстоянии от игрока - это кушает ресурсов сервера и не особо рекомендуется. Сообщение отредактировал Melisse - Oct 3 2012, 09:29 |
![]()
Сообщение
#12
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата можно было писать(программировать человеку) "поведение НПС" максимально высокоуровнево, с максимальной контекстностью. Возможно стоило обратить внимание на какие-то реально разрабатываемые языки для "обучения " ИИ в мире, там наверное обозначают основные проблемы в этой сфере программирования. Нвскрипт - и есть этот высокоуровневый фреймворк (IMG:style_emoticons/kolobok_light/smile.gif) И городить сверху ещё огород - уже не очень с руки. Проблема в данном случае в том, что он тормозной, по кастомным боевым ИИ это хорошо видно. Если, к примеру, мобов с джаспером натыкать штук 40, они так будут скриптами шуршать, что либо хертбит будет раз в 20 секунд, либо сервер попросту ляжет (IMG:style_emoticons/kolobok_light/smile.gif) Да, программирование не предлагает иного варианта, кроме как дерева условий, но я думаю, как это оптимизировать (IMG:style_emoticons/kolobok_light/smile.gif) Вопросом ИИ я давно увлекаюсь. Цитата Биовары пошли по пути вейпойнтов и локальных переменных заданных при создании существа, но тут уже только в этом 2 параметра которые нужно регулировать в разных местах вместо одного - уже плохо. Я скрипты свои с нуля пишу, кучу ненужных настроек я брать не буду. На данный момент нет никаких переменных в том объёме, что они есть в дефолтном ИИ (IMG:style_emoticons/kolobok_light/smile.gif) Цитата мне кажется если есть точка - то не сложно ее найти, чем генерировать каждые 6.0 сек случайную Куда-то вы забурились не туда (IMG:style_emoticons/kolobok_light/smile.gif) Нет никаких случайных точек.
|
![]()
Сообщение
#13
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Нвскрипт - и есть этот высокоуровневый фреймворк (IMG:style_emoticons/kolobok_light/smile.gif) И городить сверху ещё огород - уже не очень с руки. Проблема в данном случае в том, что он тормозной, по кастомным боевым ИИ это хорошо видно. Если, к примеру, мобов с джаспером натыкать штук 40, они так будут скриптами шуршать, что либо хертбит будет раз в 20 секунд, либо сервер попросту ляжет (IMG:style_emoticons/kolobok_light/smile.gif) Ден, это скорее проблема реализации (IMG:style_emoticons/kolobok_light/smile.gif) Джасперовский АИ очень хорош с точки зрения учёта всего-чего-изволите, но реализован крайне топорно. Пример: функция, отвечающая за каст боевых заклинаний, пробегает почти все их с проверкой вида if(GetHasSpell(SPELL_FREAKING_SOMETHING))ActionCastSpell(SPELL_FREAKING_SOMETHING, GlobalTarget), а правильный подход в данном случае - кэшировать в онспавне/онресте существующие заклинания и кастовать их уже из таблицы. С использованием в сомнительных местах NWNX для быстрого доступа к содержимому слотов. Как вариант, вынести наиболее требовательные к времени исполнения части в NWNX (2.8 API не идеален, но им в отличии от предыдущих версий можно пользоваться без непрерывного потока нецензурных мыслей). Сообщение отредактировал Ilerien - Oct 3 2012, 18:54 |
![]()
Сообщение
#14
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Видел я эти вилки по 15к строк кода (IMG:style_emoticons/kolobok_light/smile.gif) Титанический труд. Но когда я оставил зоопарк из штук 30 тестовых мобов в спецлокации и запустил модуль, с тми вывалились перцепшн-скрипты (IMG:style_emoticons/kolobok_light/smile.gif) Кажется, до просчёта спеллов дело даже не дошло.
С коммонерами этой проблемы быть не должно - у них нет 500 спеллов (IMG:style_emoticons/kolobok_light/smile.gif) Я получил в своё распоряжение тестовую площадку, буду на днях продолжать изыски (IMG:style_emoticons/kolobok_light/smile.gif)
Прикрепленные файлы
|
![]()
Сообщение
#15
|
|
Level 6 ![]() ![]() Класс: Друид Характер: Chaotic Neutral Раса: Гном ![]() |
Вспомнилась одна строчка из песни, которая иногда как нельзя лучше отражает поведение АИ в НВН:
-Если друг оказался вдруг и не друг и не враг - attack! |
![]()
Сообщение
#16
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
Видел я эти вилки по 15к строк кода (IMG:style_emoticons/kolobok_light/smile.gif) Титанический труд. Но когда я оставил зоопарк из штук 30 тестовых мобов в спецлокации и запустил модуль, с тми вывалились перцепшн-скрипты (IMG:style_emoticons/kolobok_light/smile.gif) Кажется, до просчёта спеллов дело даже не дошло. С коммонерами этой проблемы быть не должно - у них нет 500 спеллов (IMG:style_emoticons/kolobok_light/smile.gif) Я получил в своё распоряжение тестовую площадку, буду на днях продолжать изыски (IMG:style_emoticons/kolobok_light/smile.gif) Тут спелы как пример говорится. Я думаю и в програмировании АИ найдутся "узкие места" ничуть не легче с точке зрения производительности чем джасперовские 500 некешированых заклов. Например. мы хотим делать реакции на окружение (в частности креачуров, плейсаблы), так в хорошей локе плотность объектов на сантиметр экрана - очень большая, а если например у нас запрограмленна реакция только на один среди этой кучи? всеравно перебирать нужно все в области видимости? а если еще учитывать "геометрическую видимость", и если этих комонеров штук 10 рядом - то вообще жопа. А про высокоуровневость я с тобой не согласен, я имею ввиду что средство в котором можно будет разрабатывать "реакции для ИИ"(программировать этот самый ИИ) должно иметь наиболее оторванность от аппаратной/cпец(в нашем случае можно сказать от NWScript) части и ближе к человеческому языку и построению "логики решений" самого человека, это позволило бы програмировать поведение в общем случае быстрее(за день допустим ты запрограмлишь 20 вариантов ИИ, вместо 10, при равном конечном качестве) чем ковыряясь в дебрях различных событий NWScript и проблемах его применимости.. Мне показалось чтот-то похожее что я имею ввиду http://ru.wikipedia.org/wiki/CLIPS , язык для экспертных систем. А контекст - это смена значения одного и того же написанного кода он применяется к разным вещам, грубо говоря пишем команду "помочится", если команда применяется к человеку - он идет в отхожее место но если команда применяется например к собаке - она ищет дерево и поднимает заднюю лапу - строчка кода одна, контекста два. Сообщение отредактировал PaiNt - Oct 4 2012, 00:15 |
![]()
Сообщение
#17
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
С т.з. программирования это не по фен-шую (IMG:style_emoticons/kolobok_light/smile.gif) Наделаешь вот так 100 разных крич с разными скриптами, а потом оказывается, что вот эти базовые задачи, которые везде раскопипастены, надо модифицировать. Ну тут уже зависит какова ваша цель: создать качественную программу, или качественную игровую среду. Можно использовать гибкий и легко податливый изменениям код, можно поступить еще профессиональнее и сделать его через инклюды… Но как правило для отличного результата в игре не понадобится 100 разных крич – половина от силы, а то и треть; с развитым АИ – единицы. Чтоб получилось хорошо, нужно делать не универсально, а специализированно. Естественно придется много работать, чтобы это сделать.хищники переодически прогуливались до точки, где собирались травоядные, по пути рандомно создавая случайные локации, по которым они пробирались Вейпоинты – это такой же «якорь», как и нефеншуйно скомпилированные скрипты. Я прибегал к вейпоинтам только в самом крайнем случае и только в порядке прописывания конкретного эвента. Например если у вас есть страж патрулирующий улицы города в определенные часы – проще накидать ему оригинальных вейпоинтов и не морочиться; а если это АИ разбойника который может спавниться в n-различных местах – нужно выбирать: делать ли целый комплекс спавна для этого криттера, включающий ряд однотипных служебных вейпоинтов расставляемых на каждой локации вручную, или написать по большей части казуальный рендумволк с множеством «if» подразумевающих обобщенные событийные триггеры которые могут произойти в этих локациях.Естественно последний вариант более универсальный; но с другой стороны страж при исполнении тыкающийся по бордюрам клумб, стенам домов и заборам – довольно жалкое зрелище. Вывод – все должно опираться на чувство меры разработчика. Полноценный «Искусственный Интеллект» изобретать вовсе не обязательно, достаточно качественно сделать имитацию одной или нескольких наиболее ярких особенностей. ПС все равно не будет беседовать с первым попавшимся неквестовым НПС о смысле жизни или приглашать на свидание в ближайшую таверну – для этого есть другие игроки (вы же не делаете совсем синглплеер), а НПС должны быть всего лишь качественными декорациями которые будут создавать видимость целостности издалека. |
![]()
Сообщение
#18
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Цитата Если, к примеру, мобов с джаспером натыкать штук 40, они так будут скриптами шуршать, что либо хертбит будет раз в 20 секунд, либо сервер попросту ляжет А зачем 40 штук в одной локации? Помниться, на геме1, я ставила 30 мобов и тут же начинались лаги и аи просто не работал. Мне кажется, что на это и не расчитан сервер. В локации 12х12 тайлов (рекомендовано не больше 150 тайлов), оптимально работают 10 мобов, при 15 уже хуже - дык больше и не надо + еще игроки. Для того и существуют экаунтеры (не только стандартные), чтобы спавнить встречи 1-6 мобов. Сообщение отредактировал Melisse - Oct 4 2012, 10:02 |
![]()
Сообщение
#19
|
|
Level 6 ![]() ![]() Класс: Друид Характер: Chaotic Neutral Раса: Гном ![]() |
А зачем 40 штук в одной локации? Помниться, на геме1, я ставила 30 мобов и тут же начинались лаги и аи просто не работал. Мне кажется, что на это и не расчитан сервер. В локации 12х12 тайлов (рекомендовано не больше 150 тайлов), оптимально работают 10 мобов, при 15 уже хуже - дык больше и не надо + еще игроки. Для того и существуют экаунтеры (не только стандартные), чтобы спавнить встречи 1-6 мобов. Вот сейчас посмотрел специально. Городские подземелья Эндора. Локация 12х12. 67 мобов. Около 280 вэйпоинтов. Десятки плэйсэйблов. Во времена онлайна даже ночью там никогда не отсутствовали игроки. Лагало только однажды, когда там было выброшено несколько сотен неисчезающих скриптово вещей. |
![]()
Сообщение
#20
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Цитата Вот сейчас посмотрел специально. Городские подземелья Эндора. Локация 12х12. 67 мобов. Около 280 вэйпоинтов. Десятки плэйсэйблов. Во времена онлайна даже ночью там никогда не отсутствовали игроки. Лагало только однажды, когда там было выброшено несколько сотен неисчезающих скриптово вещей. В локациях компании - в городе по 50 нпс стоит и нормально. я про джаспероский аи, при некоторой настройке он вполне нормальный и не лагает, да при большом кол-ве. |
![]()
Сообщение
#21
|
|
Level 3 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Ах да. Есть хитрые идеи творческого плана? Не совсем самостоятельная идея, скорее дополнение. Сделать уровень занятости для НПС. В зависимости от этого уровня, НПС будет более целенаправленно и быстро шагать к своему вейпоинту, или наоборот с удовольствием глазеть на прохожих, поворачиваясь им вслед и охотно вступая в диалог. Если НПС, допустим, стражник спешащий на крики о помощи, то он вряд ли будет вступать в диалог с кем либо. Ну, а если это какой-нибудь бездельник, то и поболтать не прочь и лицом поторговать. Как вариант, при этом можно накладывать бонус/штраф скорости ходьбы/бега в приделах 10%. Это должно создать некую иллюзию того, что кто-то торопится а кто-то не особо. Сообщение отредактировал Fimko - Oct 4 2012, 17:35 |
![]()
Сообщение
#22
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
По-моему нет необходимости выводить это в отдельно настраиваемую категорию, обычные реакции на событийные триггеры:
- время послеобеденное, погода замечательная – НПС рад и весел, шатается праздно по улочкам, периодами ненадолго вспоминая, куда он шел; - уже темнеет или вдруг начался дождь/снег – НПС торопится сделать то, что хотел и вернуться под какой-либо кров согреваться; - «в Богдаде все спокойно» - НПС-страж мерно меряет мостовую шагами от вейпоинта к вейпоинту; - кто-то кого-то атаковал или другие НПС подняли крик – НПС-стражник спешит на помощь, громко бряцая латными сапогами по мостовой на бегу… …Ненужно никакого уровня, просто детально запрограммированные события индивидуальные для каждого АИ – смотреться будет намного красивее, чем универсальный переключатель. |
![]()
Сообщение
#23
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Оставлю пока ваши споры, займусь реализацией выбора целей. Просто захардкодить цели и сделать вилку из if-elseif не хочу, ща думаю над реализацией через бд и sql, пока выглядит довольно здраво.
|
![]()
Сообщение
#24
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
БД и SQL - это само собой, только я, как правило, подобные данные сразу кэширую в локальных переменных (с возможностью их обновления по требованию) и дальше уже работаю с ними. Всякие AI и прочие штуки постоянно используют свои данные, а лезть каждый раз в базу за ними - слишком дорого.
Пиши в аську, если что. Я всё-таки продумывал эту тему в своё время. (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#25
|
|
Level 6 ![]() ![]() Класс: Друид Характер: Chaotic Neutral Раса: Гном ![]() |
Вот ещё что нужно реализовать:
Если НПС видит валяющийся бесхозный шмот, он его осматирвает. Если вещь неотайдентифаеная, пытается отайдентифаить. Если не получается, говорит "Я понятия не имею, что это", иначе "О, это же то-то!" Далее решает брать или не брать. Если взял, решает надеть или не надеть. Если перегруз, то жалуется и выбрасывает что-нибудь (не обязательно это же). Продолжает свои дела. Если он видит бесхозный сундук\сумку\шкаф, то подходит. В зависимости от того, закрыт он или нет, и наличия или отсутствия оупен лока, открывает. Далее с содержимым контейнера вышеописаный порядок. И естественно в зависимости от степени гуманоидности все реакции. Отредактировано: Да, кстати, сделал только что у себя подбор вещей. Только вот проверку на перегруз не сделал. Есть какая-нибудь функция, которая это проверяет? Сообщение отредактировал Anakondar - Oct 5 2012, 18:56 |
![]()
Сообщение
#26
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
Я крыс научил находить и подбирать на локации в пределах «видимости» брошенное мясо/приготовленное мясо/оккупировать трупы.
Можно через GetWeight() посчитать вес инвенторя и сравнивать с вычисляемым текущим грузоподъемом НПС от мода силы. P.S.: Только тут можно переборщить и будет куча ненужных багов и несуразностей (типа как в Аркануме открыть запертую дверь? – выложить перед ней монетку: НПС увидит ее и подойдет чтоб взять, открыв перед собой запертую дверь). Сообщение отредактировал Flaristan - Oct 5 2012, 22:21 |
![]()
Сообщение
#27
|
|
Level 6 ![]() ![]() Класс: Друид Характер: Chaotic Neutral Раса: Гном ![]() |
Всё, вставил проверку на силу. Правда теперь после выбрасывания от перегруза тяжелого айтема пнс начинает идти по делам, потом вдруг замечает выброшенный (им же) айтем и с радостным криком "Ой, что я нашел!" бежит к нему. Подбирает его, перегружается, выбрасывает, и всё заново.
Пришлось после выбрасывания вешать на айтем локаль с результатом проверки на вес. Получается, после первого перегруза нпс заранее знают что сколько вокруг весит. Но в целом выглядит нормально, собиратели пустых бутылок занимаются бутылками, а на фулплейты не смотрят. Сообщение отредактировал Anakondar - Oct 6 2012, 00:08 |
![]()
Сообщение
#28
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Забавно. Клёвый алгоритм сложности O(n^2) вызывает стопроцентный тми, хотя выполняется за полсекунды (IMG:style_emoticons/kolobok_light/smile.gif) Элементов немного (пока 60, по-хорошему надо 200+), но в скрипте парочка O(n) и один O(n^2) - вылетает на 20й итерации внешнего цикла последнего (IMG:style_emoticons/kolobok_light/smile.gif) Расчёты действительно немаленькие (расстояния, массивы через строковые операции, возведение в степень), но выглядит смешно даже для 2002го.
Завтра перепишу под sql, выкину часть алгоритмов наружу, на трёх O(n) надеюсь заработает и при 200 элементах. |
![]()
Сообщение
#29
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
Коль пошла такая пьянка, похвастаюсь и я идеями!
-НПС если находится рядом с плесаблами допускающими собирательство (куст Фенберри, грибы и т.д.) подходит к ним, ставит корзинку и собирает грибки! -Если на пути НПС встречается какой-то из уличных светильников - он подходит и зажигает или тушит свет в них соответственно ночью и днем. -Стражник, если рядом с ним "вскрывают" общественный контейнер начинает пристально наблюдать за вскрывающим (как в Леворе вообщемто) -Если нпс бард - то он иногда может играть музыку, другие персонажи пока поисходит эта игра, проходя мимо могут остановится, сесть и послушать баладу. -Если рядом с персонажем есть стул и официантка - то он может сесть и заказать какую-то еду, при этом официантка тоже участвует в этой анимации. хотя конечно это все частные веселушки восновном. Забавно. Клёвый алгоритм сложности O(n^2) вызывает стопроцентный тми, хотя выполняется за полсекунды (IMG:style_emoticons/kolobok_light/smile.gif) Элементов немного (пока 60, по-хорошему надо 200+), но в скрипте парочка O(n) и один O(n^2) - вылетает на 20й итерации внешнего цикла последнего (IMG:style_emoticons/kolobok_light/smile.gif) Расчёты действительно немаленькие (расстояния, массивы через строковые операции, возведение в степень), но выглядит смешно даже для 2002го. Завтра перепишу под sql, выкину часть алгоритмов наружу, на трёх O(n) надеюсь заработает и при 200 элементах. в НВНХ еще нету конструкции подобной "Eval" или "Execute"? Расскажи как имено ты используешь SQL? |
![]()
Сообщение
#30
|
|
Level 6 ![]() ![]() Класс: Друид Характер: Chaotic Neutral Раса: Гном ![]() |
Следующая итерация - заставляю воров нормально воровать, как у ПС так и у НПС. Хотя алгоритм прописал, пока воруют очень неохотно.
|
![]()
Сообщение
#31
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата в НВНХ еще нету конструкции подобной "Eval" или "Execute"? Нет. Зато есть плагин, увеличивающий лимит инструкций на скрипт или убирающий ограничение вовсе. На волте даже рекомендуют в 2-4 раза лимит поднимать (дефолт ~130к). Но не очень хочется его привлекать, т.к. сервер однопоточный до мозга костей и подобные скрипты будут его тупо тормозить. Если играл на старых серверах, то мб помнишь, как одновременный сейв 30+ чаров на винт вызывал лаги на пару секунд (IMG:style_emoticons/kolobok_light/smile.gif) Раз уж так выходит, что в кап не влезаю, постараюсь скрипты упростить. Иначе в будущем может быть лагодром. Цитата Расскажи как имено ты используешь SQL? В данном случае немалую нагрузку вызывают 2 вещи - массивы и поиск внутри них во вложенном цикле. Массивов в нвн нет, приходится делать через строку и извлечение/замену подстрок (IMG:style_emoticons/kolobok_light/smile.gif) Я хочу попробовать выкинуть массивы наружу (они и нужны только на расчёт пути, раз в полгода то есть) и заодно организовать поиск минимума внутри за счёт субд.Если и это окажется слишком накладно (к примеру, по какой-то причине субд от нвн не сможет принимать десятки запросов в секунду, что для неё вроде как бы мелочь), придётся думать над отдельным плагином для нвнх, уж на с++ эти расчёты можно сделать как два пальца. |
![]()
Сообщение
#32
|
|
Тролль ![]() ![]() ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Neutral Раса: Тварь ![]() |
Пришлось после выбрасывания вешать на айтем локаль с результатом проверки на вес. Получается, после первого перегруза нпс заранее знают что сколько вокруг весит. Но в целом выглядит нормально, собиратели пустых бутылок занимаются бутылками, а на фулплейты не смотрят. Перемудрил – зачем локалки вешать? Просто надо было добавить проверку вещи перед подъемом на массу: если масса содержимого инвентаря + масса обнаруженной на полу близлежащей вещи > максимальной переносимой массы == вещь не трогать, проверять n+1 ближайшую вещь, если она существует; иначе подобрать.Только тогда проще сделать проверки на «нужность» вещей: если вещь на полу лучше того что одето на НПС – подобрать и надеть; если ее можно использовать (бутылки, свитки, палочки и т.д.) – подобрать и использовать в дальнейшем; если соотношение массы вещи и ее цены выгодное и НПС не перегружен – подобрать и сохранить; если вещь дешевая или НПС уже перегружен – подобрать и отнести выкинуть в ближайшую урну/продать торговцу и т.п.. Только все это ненужный перегруз модуля скриптами – если прям так уж хочется собирать с полу вещи, можно создать специальных неписей-сталкеров которые скажем в какую-то часть дня бродят по городу и подбирают всякий хлам, отправляя его сразу в свой магазин, который открывают для игрока осев на своей торговой точке другую часть дня. Или что-то вроде. |
![]()
Сообщение
#33
|
|
Level 6 ![]() ![]() Класс: Друид Характер: Chaotic Neutral Раса: Гном ![]() |
Перемудрил – зачем локалки вешать? Просто надо было добавить проверку вещи перед подъемом на массу: если масса содержимого инвентаря + масса обнаруженной на полу близлежащей вещи > максимальной переносимой массы == вещь не трогать, проверять n+1 ближайшую вещь, если она существует; иначе подобрать. Только тогда проще сделать проверки на «нужность» вещей: если вещь на полу лучше того что одето на НПС – подобрать и надеть; если ее можно использовать (бутылки, свитки, палочки и т.д.) – подобрать и использовать в дальнейшем; если соотношение массы вещи и ее цены выгодное и НПС не перегружен – подобрать и сохранить; если вещь дешевая или НПС уже перегружен – подобрать и отнести выкинуть в ближайшую урну/продать торговцу и т.п.. Только все это ненужный перегруз модуля скриптами – если прям так уж хочется собирать с полу вещи, можно создать специальных неписей-сталкеров которые скажем в какую-то часть дня бродят по городу и подбирают всякий хлам, отправляя его сразу в свой магазин, который открывают для игрока осев на своей торговой точке другую часть дня. Или что-то вроде. Смысл локалок в том, что НПС не знают изначально массу вещи, поэтому подходят и смотрят каждую и либо подбирают, либо вешают локалку. Учти ещё, что у них не бывает перегруза и GetWeight на них всегда возвращает 0. А про магазин - это хорошая идея. И да, воровство всё-таки работает. Просто у меня был детект маленький и я пероятность захотеть воровать поставил пропорционально скилу. На ночь оставил перса в городе. Утром - инвентарь пустой, даже денег нет. Проверил под ДМом - всё у воров. |
![]()
Сообщение
#34
|
|
Level 8 ![]() ![]() ![]() Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг ![]() |
Нет. Зато есть плагин, увеличивающий лимит инструкций на скрипт или убирающий ограничение вовсе. На волте даже рекомендуют в 2-4 раза лимит поднимать (дефолт ~130к). Но не очень хочется его привлекать, т.к. сервер однопоточный до мозга костей и подобные скрипты будут его тупо тормозить. Если играл на старых серверах, то мб помнишь, как одновременный сейв 30+ чаров на винт вызывал лаги на пару секунд (IMG:style_emoticons/kolobok_light/smile.gif) Раз уж так выходит, что в кап не влезаю, постараюсь скрипты упростить. Иначе в будущем может быть лагодром. В данном случае немалую нагрузку вызывают 2 вещи - массивы и поиск внутри них во вложенном цикле. Массивов в нвн нет, приходится делать через строку и извлечение/замену подстрок (IMG:style_emoticons/kolobok_light/smile.gif) Я хочу попробовать выкинуть массивы наружу (они и нужны только на расчёт пути, раз в полгода то есть) и заодно организовать поиск минимума внутри за счёт субд. Если и это окажется слишком накладно (к примеру, по какой-то причине субд от нвн не сможет принимать десятки запросов в секунду, что для неё вроде как бы мелочь), придётся думать над отдельным плагином для нвнх, уж на с++ эти расчёты можно сделать как два пальца. Да я чето тоже сомневаюсь что мускул будет выдавать операции над кучей данных быстро..хотя конечно строкомасивы - тоже не выход.. З.Ы. не подскажешь как этот плагин по лимиту инструкций называется? .. тоже как-то столкнулся с нехваткой когда приходилось анализировать 500 заклинаний и выбирать из них списки по критериям(IMG:style_emoticons/kolobok_light/sad.gif) , думаю для этой задачи можно было чтонибуть улучшить (IMG:style_emoticons/kolobok_light/smile.gif) . Сообщение отредактировал PaiNt - Oct 6 2012, 14:42 |
![]()
Сообщение
#35
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
NWNX System
|
![]() ![]() |
Текстовая версия | Сейчас: 7th July 2025 - 11:30 |