Помощь - Поиск - Пользователи - Календарь
Полная версия: Гражданский ИИ
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3
Melisse
Вы чего-то не в том разделе со скриптами. Есть же спешл тема.
denis0k
Небольшой вопрос по организации коллекции точек интереса. Есть два варианта:

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

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

Сейчас голова не варит, но что-то мне подсказывает, что вариант 2 будет очень сложно поддерживать, похоже на колосс на глиняных ногах. Идеи? Может какая комбинация?
Anakondar
Ксати (хотя не кстати, но пофигу, пусть будет), идея для поведения НПС: они иногда ходят в лес по той или иной нужде и имеют некий шанс заблудиться в лесу. Кричать "Ау!" или прятаться от диких зверей, подходить с вопросами "Как пройти в город?" или просьбами "Спасите меня!" к игрокам и другим энписям. Можно и в городе что-нибудь подобное: "Где тут библиотека?"
Flaristan
ОМГ *представил себе какие веселые баги могут возникнуть со всеми этими системами* Ну правда – у меня даже с крысиной системой «рефлекторного» уровня всплыло множество багов при отладке ее в модуле, а вы хотите полноценных «киборгов» наделать… Чую это получится попросту неиграбельно. Попробуйте поставить себе задачу попроще: сделайте АИ для самых банальных городских НПС таких как кузнец, стражник, торговец, бомж и т.д. – продумайте каким индивидуальным поведением должен этот НПС выделяться (чтоб показать всячески что он именно тот кто описан в «квенте»), придумайте чем бы он мог его разнообразить (чтоб не смотрелся как одна сплошная анимация или памятник), реализуйте это, настройте и протестите всячески в модуле. Затем уж беритесь добавлять новые ветки поведения. Иначе получится что вы «титаник» забабахаете, который на первом же айсберге с парадами и феерверками неблагодарно потонет с концами.
denis0k
Не вижу ничего сложного unsure.gif
Melisse
1 больше нравиться, мне кажется и лучше.
Вопрос: а как несколько городов? Для каждого города свои точки или одни точки на весь модуль?
denis0k
Цитата
а как несколько городов? Для каждого города свои точки или одни точки на весь модуль?
Префикс тега вейпоинтов хранится локалкой на локации. Можно один набор на весь шард, можно по несколько на город. Но из-за квадратичной сложности алгоритма поиска пути лучше все независимые друг от друга пути делать разными наборами.
Flaristan
Цитата(denis0k @ Oct 12 2012, 07:16) *
Не вижу ничего сложного unsure.gif
Тогда советую поиграть самому в то, что делаешь. smile.gif
denis0k
Ты не поверишь, но я у себя всё это обкатываю.
Flaristan
…Я надеюсь. Только «обкатать» и «поиграть» - это все-таки разные вещи. Не раз сталкивался с проблемой, когда разраб вносит в игру по его мнению разумную вещь, которая по мнению же игроков является попросту «ненужным геморроем». И не раз после обкатки и введения систем у себя замечал такой геморрой, уже играя в собственный модуль – после чего приходилось править заново. Причем дело даже не во взгляде на игру в целом «с верху», когда вся картина видна целиком. Дело в банальном не ощущении геймплея изнутри. Чтоб хорошо делать для игроков, а не для себя – нужно играть в то, что сделал.
PaiNt
Цитата(Flaristan @ Oct 14 2012, 11:19) *
Дело в банальном не ощущении геймплея изнутри. Чтоб хорошо делать для игроков, а не для себя – нужно играть в то, что сделал.

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

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

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

Представляю как дико будет выглядеть когда полгорода НПС будет устраивать такой флэшмоб. biggrin.gif А еще кстати использование уже готовых шаблонов всегда плохо тем, что при изменении исходных данных шаблоны удачных решений автоматически становятся неудачными.
denis0k
Отказался от тегов и приоритетов в пользу распределённого рандома - алгоритм выбирает сначала из точек, где никого нет, потом - где есть только один нпс smile.gif Мне показалось, что так гораздо проще и равномерней заполняются места интереса smile.gif Иначе рандом глюканёт, и будет полгорода в кабаке. Для флэшмобов напишу отдельный костылик, позволяющий по команде сгонять народ в любую точку smile.gif
Melisse
А общаться нпс будут? или просто - приходят, выпили, ушли... пришли, помолились ушли... не будет такого - типа шли шли, а потом бах встретились и давай чесать языком, сплетни..., а тут игрок ага "новая тема для разговора" (!) smile.gif Я мечтаю да?)
denis0k
Взаимодействия написать несложно, но именно диалоги меня смущают. В долгосрочном периоде это выльется в "я раньше тоже бла бла бла, но потом мне прострелили колено" от каждого встречного smile.gif В дьябле у неписей в городе есть готовые фразы, я их уже наизусть знаю, что бесит с определённого момента, уж лучше был молчали.

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

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

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

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

Сделать какие-то мини-ивенты, которые при определённых условиях (необычная погода, особые игроки в таверне в особое время и т.п.) будут запускаться - это одно, но вот постоянное наполнение локации повторяющейся болтовнёй - убивает. Особенно это будет заметно, когда у вас в таверне диалог между игроками, и каждые 10 секунд чат разрывают буратины своими "приветкакделагобухать".
Flaristan
Поэтому я за то, чтоб они молчали (улыбались и махали издалека) пока специально не подойдешь послушать, о чем они говорят.
Про «погоду» иногда тоже полезно узнать, а если это будут реально стоящие сведенья (сплетни о том, что актуально происходит в мире модуля) – то шаблоны уже не будут так маячить, потому что внимание будет на другом.
Особенно если это не диалог перезапускающийся каждые пять минут, а реально отскриптованный ежедневный эвент (2 НПС бродят по городу пока не встречаются случайно или неслучайно друг с другом, перекидываются этими фразами после чего идут в таверну бухать скажем до часу-двух игровой ночи и после чего либо отрубаются либо бредут по домам/отрубаются в процессе этого).
Или представьте себе ваш друг сказал, что он пойдет бить троллей на местное болото, вы заходите в городскую таверну спустя полчаса, а там за барной стойкой НПС обсуждают как какой-то чудик на болоте выкосил почти всех троллей, и что теперь местные друиды обеспокоены за их популяцию. Было бы круто использовать такую таверну в игре по назначению, чтоб к примеру банально найти себе «работу».
denis0k
Было бы круто, если бы на сервере всегда было 5+ игроков и 1+ дм smile.gif Все эти вопросы с костылями сразу отпадают.
Цитата
Или представьте себе ваш друг сказал, что он пойдет бить троллей на местное болото
За 4 года в нвн ни разу не видел такого. Задроты с неписями не говорят, а ролевики не ходят на троллей ради геноцида.
Rewazer
Цитата
Samin Gorino: Это вообще было нечто... НПС подошел к игроку (0 внимания), заговорил с ним (0 внимания), толкнул его (ударил на 2-3) - только тогда игрок обратил внимание - ударил НПС в ответ, потом еще погонялся за ним и убил... а после пошел дальше качаться на троллях, ни слова не сказал.
Цитатник
Melisse
Rewazer фига себе smile.gif)
от туда же smile.gif))
Цитата
denis0k: А дело не в деньгах, просто душу греет, когда на твоём сервере человек 30 играет безвылазно. Можно по-всякому усложнять прокачку, ослаблять заклинания (и делать прочие фиксы "по имя рп", "для атмосферы фэнтези", "по букве дид" и т.п.) и смотреть, как они развозят сопли по форуму, но всё равно день за днём заходят на сервер и фармят, фармят и фармят. Ты им откровенно палки в колёса вставляешь, а они всё равно наркоманят сутками, прогуливают работу и универ, возможно даже вылетая оттуда, перестают гулять с друзьями и ещё всячески ломают свою же жизнь. Ты вешаешь на исааки спас и урезаешь в 2 раза дроп, а на том конце кто-то бросает жену, чтобы та не мешала бить мобов в 4 раза больше обычного ради заветного пояса+6 силы. Чувствуешь нечто божественное? Это круче каких-то там денег

smile.gif
Flaristan
Цитата(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
Флэр, я был игроком, я дмил, со мной друзья дмили - всё было нормально. Только ты на каких-то фашистов попадаешь smile.gif Хотя на амене меня на форуме и забанили за спор о скиллпоинтах, но там был всего один неадекват, который через неделю со словами "я ухожу, отговаривайте" всё равно свалил.
Цитата
Кстати у тех же буржуев такого понятия как «задротство» нет вообще – есть термин «гриндинг»
Nerd. Выражает образ ботана без личной жизни, но со сколиозом и в очках. Такой может как олимпиады по математике выигрывать, так и иметь 10 эльфов 80го уровня. Задрот по-нашему.
Не отрицаю, что нвнщики могут не использовать это слово, т.к. у них дидшная аудитория несколько старше - на западе дид в массы вошло в 80х, а у нас в 2000х, и то не особо. Но факта оно не отменяет smile.gif
Flaristan
Ну почему только – не только… Видимо стаж игрока у меня значительно выше. smile.gif
На наших шардах банов у меня наверно штуки 4-5 только игровых, на буржуйских – ни одного.
Там же термина «nerd» я не слышал ни разу, зато слышал термин «addict» (зависимый) и то от одного игрока по отношению к самому себе (причем к задротству именно манчеватого толка он отношения не имеет никакого). Собсно там вообще неигровых разговоров мало (при желании можно и совсем их отключить). А в НВН2 в привате просто функционально общаться неудобно. Просто я к тому, что у них среди роливиков нет «наци» (которые считают любое маломальское проявление мачененизма не православным, карая его ждахадом) равно как и задротокача без отыгрыша на ролевом сервере.
…Ах да и устал еще повторять что НВН – пристанище не только фанов D&D (особенно теперь, когда оно уже не популярно), а и фанов НВН.
PaiNt
Цитата(denis0k @ Oct 17 2012, 01:18) *
Nerd. Выражает образ ботана без личной жизни, но со сколиозом и в очках. Такой может как олимпиады по математике выигрывать, так и иметь 10 эльфов 80го уровня. Задрот по-нашему.

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

А что касается буржуинов.. поиграв немного на Арелите могу сказать следующее:
-С точки зрения обще-ролевой атмосферы, красивой игры - они во многом лучше, и опытнее нас. Какие-то правила которые системообразующие, и нарушение которых рушит логику мира, они такое ощущение что соблюдают на подсознательном уровне. И главное для них почему-то "не западло" играть в театр одного актера smile.gif.
-С точки зрения "чувства юмора" (не специфического языкового, а просто смыслового) - производят впечатления какого-то "неразвитого" общества, такое ощущение что они вообще не шутят sad.gif, когда играешь там любое высказывание обдумываешь на этот момент.. вообще как-то "к жизни" персонажа, да и вообще к жизни они относятся странно..
denis0k
Цитата
Мне кажется ты не совсем прав.. Не всякий задрот - есть Nerd, однако обратное утверждение может быть верно. Нерд - носит более "умственный, полезный, общий" характер и применительно не только к играм(в отличии от "Задрота"), тобишь Нерд - множество более широкое и включает "задрота", поэтому отождествлять понятия нельзя
Согласен. Если совсем дословно, то Флэр уже привёл - addicted. Но по опыту разных ситкомов, форумов и т.п. лично я замечаю как раз nerd smile.gif Если бы переводило центральное телевиденье, там был бы ботан, но любители всегда переводят как задрот, это более ярко и в 99% случаев подходит, т.к. основная масса этих "альтернативно одарённых" - как раз любители либо фэнтези в общем, либо рпг/дид в частности. Это тоже одна из частных хохм в ситкомах - если ботан, то потом всплывёт, что либо у него паладин 80го уровня в вов, либо маг 9го уровня в дид smile.gif Как-то так, в общем smile.gif
Цитата
На наших шардах банов у меня наверно штуки 4-5 только игровых
Ну поздравляю, ты побил все известные мне рекорды smile.gif
Цитата
Ах да и устал еще повторять что НВН – пристанище не только фанов D&D (особенно теперь, когда оно уже не популярно...)
...не популярно у нас.
Flaristan
Цитата(PaiNt @ Oct 17 2012, 07:23) *
-С точки зрения "чувства юмора" (не специфического языкового, а просто смыслового) - производят впечатления какого-то "неразвитого" общества, такое ощущение что они вообще не шутят sad.gif, когда играешь там любое высказывание обдумываешь на этот момент.. вообще как-то "к жизни" персонажа, да и вообще к жизни они относятся странно..
Ну они просто весьма серьезно и основательно относятся к образу своего персонажа (одна только реализованная возможность отключать приват в купе с отключенным патичатом и правилом писать только отыгрыш в прочие каналы с запретом слешей - показатель). К тому же там наверняка есть много персонажей с пермосмертью (10 жизней) и многие не чураются отыгрывать рецессивные роли по отношению к доминирующим ролям других игроков, боясь (от лица персонажа) расправы от служителей темных культов и властей городов (которые есть другие игроки). Собсно стража и глазом не моргнет, убив вас в городе за отказ убрать оружие/снять капюшон или шлем/убрать обкаст/выйти из хайда или невидимости – а если вы ей нагрубите при этом, назначит нехилый штраф, за отказ оплаты которого или отсидку его в тюрьме вас могут не просто убить, а и объявить в городе нон-грато, что будет означать буквально то, что ваш персонаж уже не сможет зайти в ворота этого города до снятия «изгнания». Все это реализовано системно и во власти других игроков, которые играют собственно власти и стражу городов. А города предоставляют гражданство, возможность участвовать в их политической жизни (вплоть до выборов и баллотирований на главенствующие должности) и порой еще и воюют между собой. И такие эпизоды как встреча с практикующим некромантом ака ПМ (получить возможность качать которого можно только у ДМ) там вполне могут закончиться смертью или костром (в зависимости кто окажется круче, хотя как правило добро там в конце концов всегда зверски побеждает). В общем, все очень серьезно. smile.gif

Цитата(denis0k @ Oct 17 2012, 07:57) *
...не популярно у нас.
Как-то у себя в городе на стене одного из домов с огромным удивлением обнаружил рисованную рекламу какой-то мелкой компании, уже не помню какой. Долго стоял и моргал на большую круто нарисованную копию Арибет из официального постера. biggrin.gif А относительно недавно мне сказали, что видели в общественном транспорте другого города рекламный плакат НВН. smile.gif Так что это все заблуждение.
Anakondar
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
Зачем?
Anakondar
Чтоб и для игроков те же правила работали. Система устойчива, если хаотическое воздействие не выводит её из равновесия. А что может быть хаотичнее живого разума? К тому же, для НПС писать очень просто: там на каждое событие есть свой скрипт. Предусмотрел в нём круг задач и реакций - и ву-а-ля. А у игроков всего один скрипт (ну не считая тех, которые модульные: дес, даинг, рест, левелап, энтер, лив, респаун...). Написать его так универсально, чтоб полноценно работал за все другие - это мастерворк! Ну и потом же можно и обратный процесс: пихать дефолт в монстров. Это красиво, я считаю.
PaiNt
Кстати поделюсь идеей если конечно не боян.

Есть в дефолтной библиотеке 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?ac...ost&id=1983

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

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

Во первых стандартные тагбэйсед скрипты не различают(по дефолту) взял ли ты в инвентарь, или активировал предмет, они запускаются и для того и для того.
Во вторых.. ситуация допустим.. у меня есть предметы типа "еда" - они имеют разные теги(они используются не только для активации, а также в других системах), так что? мне получается нужно используя стандартный тагбейсед систему создать кучу (а вариантов еды может быть и 10 и 20) скриптов сущностей на каждый тег, которые при активации делают совершенно одно и тоже? или же я создам скрипт(ud_act_1) для этого типа предметов в котором я не ограничен как узнать что предмет относится именно к типу "еда".
Melisse
PaiNt
А не проще сделать достижения через БД? ... меньше циклов - проще жизнь
PaiNt
Цитата(Melisse @ Oct 19 2012, 19:40) *
PaiNt
А не проще сделать достижения через БД? ... меньше циклов - проще жизнь

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

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

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

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

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

Ролевой шард ? Из западных играл только на экшенах, и наверное правильно сделал smile.gif, там все в порядке с чуством юмора, но да они немного отличаются и кое в чем гораздо в лучшую сторону.
denis0k
По сабжу - бродящие туда-сюда гоблины, разделяющиеся на перекрёстках аки истребители на задании, - просто ад smile.gif На очереди подключение кастомных скриптов точек интереса и оптимизация для локаций, где нет игроков.
Flaristan
Изобретение велосипеда это. PW итак прекрасно работает – даже без ДМ. Вот к примеру на Арелифе прописано АИ коммонеров (они ходят по городу сами между локаций и по помещениям, используют объекты, кузнец кует заготовки для мечей в кузнице и т.д.), но я сколько играл, внимания на них особого не обращал. По сути что они так ходят, что на месте стоят (НПС-торговцы) – без разницы. Игру исключительно игроки там делают, а НПС декорации, к которым как и положено внимания особого не привлекается. Когда во время отыгрыша (хотя какой там «отыгрыш» – это скорее правило игры, так что правильнее сказать «во время игры») говорят, что тебе нужно подойти поговорить с какой-то ключивой фигурой (будь то бармен, стражник или верховный друид, консул города) – не имеется в виду, что ты должен найти какого-то особого НПС и, подождав пока в него вселится ДМ, поболтать с ним о чем нужно. Всегда имеется в виду какой-то игрок, играющий эту роль. А выпады ключевых ролей в реальную жизнь прекрасно лечатся «текучестью кадров». Онлайн-игра все-таки: лучше привлекать людей в игру, а не стараться их заменить компьютером.
denis0k
Мы уже все поняли, что тебе это не нужно smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.