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

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

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


Тролль
****

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



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

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

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

Сообщение отредактировал Flaristan - Oct 5 2012, 22:21
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 6 2012, 00:07
Сообщение #27


Level 6
**

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



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

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

Сообщение отредактировал Anakondar - Oct 6 2012, 00:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 6 2012, 00:56
Сообщение #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 элементах.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Oct 6 2012, 01:08
Сообщение #29


Level 8
***

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



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

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

Цитата(denis0k @ Oct 6 2012, 08:56) *
Забавно. Клёвый алгоритм сложности 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?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Anakondar
сообщение Oct 6 2012, 02:08
Сообщение #30


Level 6
**

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



Следующая итерация - заставляю воров нормально воровать, как у ПС так и у НПС. Хотя алгоритм прописал, пока воруют очень неохотно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 6 2012, 07:53
Сообщение #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) Я хочу попробовать выкинуть массивы наружу (они и нужны только на расчёт пути, раз в полгода то есть) и заодно организовать поиск минимума внутри за счёт субд.

Если и это окажется слишком накладно (к примеру, по какой-то причине субд от нвн не сможет принимать десятки запросов в секунду, что для неё вроде как бы мелочь), придётся думать над отдельным плагином для нвнх, уж на с++ эти расчёты можно сделать как два пальца.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Flaristan
сообщение Oct 6 2012, 10:05
Сообщение #32


Тролль
****

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



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


Level 6
**

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



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


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

И да, воровство всё-таки работает. Просто у меня был детект маленький и я пероятность захотеть воровать поставил пропорционально скилу. На ночь оставил перса в городе. Утром - инвентарь пустой, даже денег нет. Проверил под ДМом - всё у воров.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
PaiNt
сообщение Oct 6 2012, 14:38
Сообщение #34


Level 8
***

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



Цитата(denis0k @ Oct 6 2012, 15:53) *
Нет. Зато есть плагин, увеличивающий лимит инструкций на скрипт или убирающий ограничение вовсе. На волте даже рекомендуют в 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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение Oct 6 2012, 15:43
Сообщение #35


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

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



NWNX System
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Oct 6 2012, 17:13
Сообщение #36


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

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



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


Level 11
***

Класс: Волшебник
Характер: Neutral Good
Раса: Фея



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

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


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

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


Level 6
**

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



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


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

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



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

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

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

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

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


Level 6
**

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



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


Level 11
***

Класс: Волшебник
Характер: Neutral Good
Раса: Фея



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

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

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


Level 8
***

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



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

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

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


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

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



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


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

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



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

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

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


Level 11
***

Класс: Волшебник
Характер: Neutral Good
Раса: Фея



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


Level 6
**

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



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

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


Тролль
****

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



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

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

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

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

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


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

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



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


Level 6
**

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



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


Тролль
****

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



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

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

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

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

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

 



Текстовая версия Сейчас: 23rd July 2018 - 20:17