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

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

9 страниц V   1 2 3 > » 

_kaa_
Отправлено: Jun 5 2006, 12:36


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE(Existor @ May 30 2006, 16:01) [snapback]83253[/snapback]

_kaa_
Все зависит от того, что хочешь реализовать.

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


Своим постом я ни в коем случае не хотел разводить флейм, а скорее подвести итоги теме, которая тянется с момента выхода НВН (IMG:style_emoticons/kolobok_light/smile.gif)
Да, всем интересно сделать связанные миры, дать свободу игроку в выборе. Нет, игра на это не расчитана и трудоемкость решения всех мелочей для организации этого, незапланированного толком разработчиками процесса, превышает плюсы. Я постарался описать моменты, где применение порталов вполне оправданно, и еще раз подчеркнул трудозатраты для остальных.
  Форум: Шарды рунета · Просмотр сообщения: #83767 · Ответов: 243 · Просмотров: 83,458

_kaa_
Отправлено: May 30 2006, 13:45


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


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

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

Чего не выйдет сделать без ножа - объеденение нескольких разных шардов. Такое возможно _только_ при условии, что это было запланированно при создании шардов и делалось на общих хаках и общих игровых\экономических и прочих системах.
  Форум: Шарды рунета · Просмотр сообщения: #83226 · Ответов: 243 · Просмотров: 83,458

_kaa_
Отправлено: Apr 18 2006, 14:51


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE(helvene @ Apr 17 2006, 16:40) [snapback]78324[/snapback]

Может быть, конечно, и не стоит - но помотрите на результаты. Больше всего рекомендуют каа, Зиррекса или мамука. А все они трое до сих пор являются (каа до определенного момента был) разработчиками и в немалой степени идеологами именно РП-шардов.
Ни о чем не говорит?


Не надо считать меня идеологом РП (IMG:style_emoticons/kolobok_light/smile.gif) Никогда им не был.
Сначала я играл в НВН, пока было интересно, потом меня заинтересовал тулсет и скрипты. Ключевое слово - "интересно". В данным момент я считаю НВН пережитком прошлого и без особого будещего (правда только в тенхическом плане). Хотя несомненным плюсом считаю тулсет, именно он дал НВН прожить столько.
Заниматься разработкой шардов на НВН сейчас для меня не интересно, как и не интересно в нее играть (не в РП, для этого и самой игры не нужно - в чем плюс РП, но этого уже недостаточно для сбалансированного шарда, на котором всем интересно).

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

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

ps.
В свое время я попросил Айвана создать этот топик только с одной целью - для общения разработчиков, для обмена наработками\идеями\знаниями, чем сам в меру возможностей занимался. Всех ругающихся старался отсюда гнать в другие топики и тут оставлять только технические вопросы, посему сей флейм-топик закрываю, если хотите продолжать - идите в другую тему. Не знаю зачем Айвану понадобилось проводить опрос, но думаю не просто так и посему ту тему попрошу закрыть и удалить его самого после того, как он получит вопрос на свой ответ.
  Форум: Шарды рунета · Просмотр сообщения: #78498 · Ответов: 45 · Просмотров: 57,905

_kaa_
Отправлено: Apr 10 2006, 08:36


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Собрать получалось у всех, на форуме по этому достаточно информации. Проблемы дальше, с запуском. Он использует библиотеки, которых по дефолту нет во ФриБСД, их надо тащить с рабочей линукс машины в каталог /compat.
Если получилось запустить и плагины к nwnx работают без всяких бубнов - тогда напиши (IMG:style_emoticons/kolobok_light/smile.gif)

ps. Для меня сейчас не актуально, последний шард работает под Linux - но для истории пригодится
  Форум: Шарды рунета · Просмотр сообщения: #77138 · Ответов: 8 · Просмотров: 14,566

Важно! Скрипты
_kaa_
Отправлено: Feb 16 2006, 16:26


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Цитата(Zirrex @ Feb 16 2006, 13:55) [snapback]70222[/snapback]

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

Сам скрипт:
...
В данном случае рассматривается точная копия персонажа игрока, который создается в момент входа на арену.

В момент выхода игрока с сервера часть информации об игроке уже недоступно. В частности CDKEY. Подробнее должно быть где-то в шардах, кажется тут: http://www.wrg.ru/forums/index.php?showtopic=241
Там же были советы по решению таких проблем.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #70233 · Ответов: 3670 · Просмотров: 700,380

_kaa_
Отправлено: Dec 12 2005, 13:27


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Тему закрываю, virusman'у и Existor'у по устному предупреждению: за попытку самомодерирования и за оффтоп.
  Форум: Шарды рунета · Просмотр сообщения: #62578 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Dec 7 2005, 09:57


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Elor @ Dec 6 2005, 04:36)
Улыбнуло.

Какой популярный получился топик, ДМы стали подтягиваться, добро пожаловать.

В тему номера, получается что народ представляет себе разные модели шардов.

Первая модель - максимально изолированный от ДМ-ов мир, полное ПвП по правилам, все нарушения правил отслеживаются скриптами. Мир полностью независим, все что нужно игроки могут найти\убить\сделать сами. ДМы существуют только для поддержки пользователей в ситуациях, где скрипты не справились. Плюс развлекают игроков, запуская незаметно квесты (хотя уже и это противоречит идеи шарда, вдруг ДМ будет проводить квесты только для своих друзей?). Все действия ДМ отслеживаются, каждая выданная шмотка или опыт отражается в журнале и по малейшему подозрению игрока проводится расследование с привлечением администрации шарда. ДМ на шарде - на работе, помогает «застрявшим» игрокам, следит за читерами, развлекает игроков когда тем скучно. Зарвался ДМ – выгнали, позвали другого.

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


Есть смешанные модели, с элементами первого и второго типа, когда из первого взяты некоторые элементы, ослаблен контроль за ДМ-ами, так чтобы им можно было играть на шарде без зарплаты, или с элементами второго типа, где ДМ играют не такую значимую часть, как могли бы \ хотели бы.

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

Мне остается только посочувствовать некоторым товарищам, которым в своей жизни не пришлось поиграть на шардах второго типа.
Добавлено в [mergetime]1133939252[/mergetime]
QUOTE (-fenix- @ Dec 6 2005, 23:13)
Просто от таких, как правило, потом очень много вони на форуме, или я не прав? Потом он зайдет другим чаром с другого компа и начнет делать то же. А потом зайдет другой, третий и с ними та же картина. Все это выливается в срач на шарде и форуме, который портит отыгрыш, мешает другим игрокам, они все время отвлекаются и обращают внимание на выходки неких личностей.


Еще как прав. Я уже говорил, что отсутствие тормозов (хотя бы в виде стоимости игры и ключа) приводит к появлению большого количества таких уродцев. Нужно как-то фильтровать игроков, если это РП шард, а не ПвП mmorpg.
Вот возможные варианты:
1. Сделать только английскую версию. (лицензионную само собой). Проблема с такими уродами отпадает на 99.5%
2. Требовать лицензионную игру и проверять ключи. Самый действенный способ, правда не в наших краях.
3. Брать деньги за игру. (Самый спорный, но весьма действенный способ)
4. Проводить собеседование с каждым игроком перед запуском на шард. Самый трудоемкий и не самый действенный метод.

После такого отбора игроков проблемы с ПвП так остро стоять не будут достаточно написать правила, что можно а что нельзя. Нарушил - наказали, еще раз нарушил - строже наказали. Еще раз нарушил - выгнали,забанили и забыли. И нет проблемы.
А в наших условиях, когда и забанить толком нельзя (если он на модеме - то только банить подсеть, а там могут быть и другие игроки) уродцы процветают и продолжают гадить где попало.
  Форум: Шарды рунета · Просмотр сообщения: #61953 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Dec 5 2005, 13:45


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Existor @ Dec 5 2005, 14:23)
Если вам, для того чтобы РАБОТАТЬ над шардом необходимы деньги, можете винить в этом только свое слабоволие и лень.
Я ЛИЧНО знаю людей, которые подходят к вопросу создания шарда как к РАБОТЕ.
Главное не деньги, а отношение к тому что ты делаешь, и сам факт, что ты чтото делаешь.

Опять вы меня не поняли. Вопрос не в том, чтобы заработать на этом. Для того, чтобы заработать - я иду на работу. НВН для меня - хобби. А насмешил меня ярлык "ДМ-клоун", слишком давно я не бывал на таких шардах, где это верно. Вы же не делали различий, для вас любой ДМ- клоун. Когда попытался приклеит этот ярлык к людям, которых считаю ДМ-ами - стало смешно.
  Форум: Шарды рунета · Просмотр сообщения: #61651 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Dec 5 2005, 13:19


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Existor @ Dec 5 2005, 13:47)
Совершенно правильное впечатление. Я именно про это и говорю.
Администрация делает свою РАБОТУ.
ДМ ДОЛЖЕН делать свою РАБОТУ. Иначе никакого смысла в том, что он есть, нет.
Игрок должен ОТДЫХАТЬ.
Равенство\неравенство откиньте в сторону. Все делается на энтузиазме и для игроков, а не для того чтобы удовлетворить свои амбиции. Это - модель идеального шарда.

Основное заблуждение. За РАБОТУ платят, именно это является критерием работы. Если не платят - это не работа, это развлечение, хобби. И делать там человек будет то, что ему интересно, что ему нравится делать, с чего человек получает "fun".
НВН как раз такое хобби, где человек вкладывает свое время в шард и получает с него тот самый "fun". Игрок там - не бог, вы сильно попутали коммерческие mmorpg с НВН-шардами.
  Форум: Шарды рунета · Просмотр сообщения: #61644 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Dec 5 2005, 13:13


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Existor, боюсь что это вы привратно понимаете, кто такой ДМ. Это не тот, кому дали ДМ-пасс и он может зайти "клоуном", развлечь игроков. А приглашенные ДМ часто именно клоунами и бывают, т.е. развлекают народ и ничего более.
"Правильный" ДМ неотличим от разработчика, даже если он не пишет скирпты или не сидит в тулсете. Он не по диалогам с шарда знает сеттинг, основную "линию партии", т.е. направление развития шарда с точки зрения команды разработчиков. Это верно и в обратном направлении, не каждый разработчик обязан быть ДМом.
Именно такие ДМ-ы создают (или, точнее, дополняют) атмосферу шарда. ДМом на подобном шарде можно стать только одним способом - играя, улучшать его своей игрой.
Судя же по вашем постам, вам попадались только ДМ-ы клоуны, которым иногда страшно дать ДМ-пасс, из опасений, что они воспользуются ДМ-клиентом, чтобы раздать опыт\шмотки своим друзьям.

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

Весь вопрос, как обычно, упирается в людей, в команду разработчиков (как "высшую инстанцию", именно она делает мир и решает, кто будет играть и кто будет ДМить). И критерии отбора в ДМы гораздо жесче, чем в случае с игроками.
Если вас приглашают стать ДМом на шарде, на котором вы даже не играли - повод задуматься. Конечно, вам может быть лестно, что вас сразу зовут в ДМы, но кто сказал, что шард придется вам по душе? Такой подход я считаю не верным.

А возращаясь к нашей теме, к ПвП - мое мнение так и остается неизменным. Какие люди разрабатывали шард, какие люди на нем играют - такой будет ПвП на шарде. Разработчики могут сделать только одно - не допустить на шард тех, для кого правила шарда не значат ничего.
  Форум: Шарды рунета · Просмотр сообщения: #61643 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Dec 4 2005, 01:25


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


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

Весь вопрос "должно ли быть ПвП или нет" упирается в другой, а именно - каким образом _фильтровать_ игроков, чтобы на шард попадали _нормальные адекватные_ игроки, ( нормальные в рамках ДМов данного шарда). В российских условиях, где каждый школьник из клуба может зайти на шард, это приобретает совершенно другой оттенок и совершенно другое значение.

Не забываем, каждый любой существующий шард в россии строится силами ДМ-ов и разработчиков, которые сами в праве выбирать себе игроков, которых они пустят на _свой_ шард. А пустят они тех, с кем им будет интересно играть, хотя вопрос _фильтрации_ игроков весьме не прост в наших условиях. Так что давайте будем говорить о том, как привлечь интересных (для конкретного шарда) игроков и недопустить тех, кто заведомо неинтересен и будет мешать на данном шарде.

ps. Подводя итоги. Любой шард _удался_, если есть достаточное количество игроков, играть с которыми разработчикам данного шарда интересно. Если разработчикам интересно повальное ПвП с минимальным участием ДМ-ов - то и играть на таком шарде будут игроки, которым такие правила интересны. (Варианты, когда при убийстве персонажа игрок заходит ДМ-ом, чтобы пару десятков раз убить "обидчика" мы не считаем, хотя и такие есть).

pps. Не правы те, кто пытается сравнить НВН с существующими mmoprg играми (и я в том числе). Любая существующая mmorpg игра разработана для _получения прибыли_ с игроков, а не для _интересной игры разработчиков_. Не будем забывать об этом и пытаться делать неправильные выводы.
  Форум: Шарды рунета · Просмотр сообщения: #61466 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Nov 25 2005, 17:18


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (helvene @ Nov 22 2005, 15:59)
virusman, а можно уточнить, что именно вы понимаете под словом "фильтрация"?

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

Теперь о конструктивном. НВН уже игра не новая, новичков приходит мало. Большинство (60%-90%) играющих живет на нескольких форумах.
Так что ставить пароль на шард, выдавать его после регистрации тем, кого знаешь или после быстрого ознакомления с постами на форумах, указанных игроком. Для того чтобы "оценить" подходит тебе такой игрок или нет этого в 95% случаях будет достаточно.
  Форум: Шарды рунета · Просмотр сообщения: #60398 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Nov 25 2005, 17:12


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Пару лет назад я описывал несколько стандартных инклудов
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #60396 · Ответов: 2 · Просмотров: 7,572

_kaa_
Отправлено: Nov 22 2005, 14:54


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Richard @ Nov 22 2005, 15:37)
РП шарда не бывает... Ибо в НВН слишком урезаны возможности для отыгрыша...


Для РП достаточно возможности обмениваться тектовыми сообщениями.

QUOTE

Мидгард был неплохим шардом, правда и администрация на него забивала.


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

  Форум: Шарды рунета · Просмотр сообщения: #60014 · Ответов: 161 · Просмотров: 74,289

_kaa_
Отправлено: Nov 17 2005, 22:38


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


--offtopic--
По моему давно пора вводить правило - НЕ отвечать тем, кто не прочитал _хотя бы_ учебник Айвана. Это конечно хорошо, что все такие отзывчивые, но теперь за этими тоннами мусора не найти ничего полезного даже тем, кто этот учебник прочитал вчера.
Предалагаю закрепить это в правилах, ставить за такие вопросы предупреждения и отсылать к учебнику.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #59404 · Ответов: 3359 · Просмотров: 635,595

Важно! Скрипты
_kaa_
Отправлено: Nov 12 2005, 21:10


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Vhall @ Nov 12 2005, 16:43)
Существует задача запрещения использования лечебных спеллов (всех из healing subschool, за исключением Rise Dead и Resurrect) на определенной расе.
Допустим, кастанул cure light wounds – эффекта ноль + StrRef-сообщение.
Может кто теорией помочь?

Чтобы не править скрипты спеллов - поправь один скрипт, spellhook кажется называется. С HoTu все спеллы вызывают его перед запуском любого спелла. Там ты можешь узнать и расу кастера, и ID спелла, отменить его и выдать сообщение.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #58530 · Ответов: 3670 · Просмотров: 700,380

_kaa_
Отправлено: Nov 10 2005, 14:50


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Передал dd_ по совету Vanes'а, стало на 10 скриптов меньше.
Обновил модуль с примером, лежит там же (.rar, 21kb)
Кроме того выложил .erf для импорта, лежит тут (.erf, 39kb)
  Форум: Шарды рунета · Просмотр сообщения: #58073 · Ответов: 4 · Просмотров: 10,992

_kaa_
Отправлено: Nov 8 2005, 20:12


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Может nwnx, разобраться придется в любом случае - тут нельзя просто сказать что нужно делать.
Но самая большая сложность тут не в нвн, а в форуме, именно его надо править.
  Форум: Шарды рунета · Просмотр сообщения: #57741 · Ответов: 17 · Просмотров: 21,695

_kaa_
Отправлено: Nov 7 2005, 12:50


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Dik Morris @ Nov 7 2005, 10:16)
Народ, помогите. Блин, вещи в 10 раз сложнее у меня получаются, а всякая фигня нет. :)
Сказывается незнание английского и функций тулсета.
Как обозначить ПС ? Скрипт, стоит на слоте, когда игрок получает предмет. (В мод свойствах)

Открывай лексикон, вбивай имя нужного события On.. и смотри, там обязательно указаны функции, которые актуальны для работы с этим событием.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #57434 · Ответов: 5109 · Просмотров: 851,317

_kaa_
Отправлено: Oct 29 2005, 08:05


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Попробовать можно, все же реальная польза от сокращения количества скриптов вроде бы есть.
  Форум: Шарды рунета · Просмотр сообщения: #56023 · Ответов: 4 · Просмотров: 10,992

_kaa_
Отправлено: Oct 28 2005, 23:17


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (helvene @ Oct 29 2005, 00:06)
Та, с которой столкнулась я: могут оверрайдится текстуры, особенно если один из хаков использует стандартную биоваровскую, а другой ее как-то модифицирует.

Т.е. тайлсетовый хак должен только добавлять свои тайлсеты, но не модифицировать стандартные? Что в принципе правильно для общего хака.
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #55982 · Ответов: 45 · Просмотров: 104,149

_kaa_
Отправлено: Oct 28 2005, 22:01


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Спецы по хакам, объясните мне такой момент.
Если собрать хак _только_ их тайлсетов - какие могут быть баги при наличии нескольких хаков?
Насколько я помню, если собирать несколько хаков, в которых правлены .2da с плейсиблами, итемами и прочим - будут баги, таблицы основные одна на хак и следующий подключаемый должен учитывать изменения предыдущих. Есть ли такая проблема с хаками только из тайлсетов?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #55958 · Ответов: 45 · Просмотров: 104,149

_kaa_
Отправлено: Oct 28 2005, 20:14


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Тут продолжение
Поскольку уже не для "зеленых" новичков и больше нужно для шардов (хотя и для развитых модулей пригодится)
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #55936 · Ответов: 8 · Просмотров: 32,584

_kaa_
Отправлено: Oct 28 2005, 20:13


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


Генерация динамических диалогов (dd).

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

Использование dd можно условно разделить на три этапа:
1. Скрипт: Инициализация, заполнение списка (из чего будем выбирать)
2. Взаимодействие с игроком: Сам диалог, выбор элемента из списка.
3. Скрипт: Реакция на выбранный пункт, обработка.

1.Список задается парами значений типа string. {sDesc,sValue}.
sDesc - описание (та часть, что будет видна в диалоге)
sValue - значение (для универсальности строка)

Но перед заполнением списка требуется инициализация dd

В диалоге отразится значение sDesc, а при выборе этого пункта
указанному скрипту обработки будет доступно значение sValue.
Параметры (скрипт обработки, "ширина" окна и т.п.) задаются
примерно так:

Neverwinter Script Source
dd_Init(object oPC, string sInfo, string sAction_Script,int iWinSize=10,int  iConfirmation=1,string sConfirmationScript="",int iReturnAfterOk=1);


где:
sInfo - Отображаемая информация о диалоге
iWinSize - "ширина" окна, т.е. количество одновременно отображаемых пунктов в диалоге. максимум 10, минимум 3, по умолчанию 10.
sAction_Script - имя скрипта, который будет заниматься обработкой результата. скрипту будет доступны значения sDesc,sValue из выбранного пункта списка.
iConfirmation - Регулирует вид диалога, требуется ли подтверждение выбранного элемента или нет.
Если FALSE - при выборе элемента списка сразу вызывается действие ("быстрый" вариант),
если TRUE - вызывается подтверждение выбранного пункта, при желании с выдачей дополнительной информации по этому пункту
sConfirmationScript - если предыдущий параметр TRUE, при отображении подтверждения вызывается указанный скрипт. Результат работы такого скрипта (строка) отображается в виде "подсказки" в диалоге.
iReturnAfterOk - после выбора пункта "ок" вернуться в начало диалога.

добавить пару sDesc,sValue в диалог можно примерно так:
Neverwinter Script Source
dd_Add(oPC,sDesc,sValue);


2. Сам диалог

3. Обработка результата. Указанный в dd_Init() скрипт вызывается и ему доступны переменные sValue,sDesc из выбранного элемента.

Скрипт инициализации всё выглядит примерно так:

dd_Init(oPC,sInfo,sAction_Script...)

dd_Add(oPC,sDesc1,sValue1)
dd_Add(oPC,sDesc2,sValue2)
dd_Add(oPC,sDesc3,sValue3)

dd_Show(oPC);

В тестовом модуле есть скрипты-шаблоны, которые нужно записать в папку /scripttemplates , обязательно с расширением .txt, тогда при создании нового скрипта достаточно будет щелкнуть по нужному, все основные функции там уже есть.

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

Пример 1.

Самый простой. Откроем игроку диалог в котором будут перечислены все объекты на локации. При выборе ничего происходить не будет, это просто демонстрация работы диалога.

Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name Пример 1
//:: FileName dd_ex_showobj.nss
//:: Copyright ©
//:://////////////////////////////////////////////
/*
Шаблон для инициализации dd
*/

//:://////////////////////////////////////////////
//:: Created By: _kaa_
//:: Created On: 27/10/2005
//:://////////////////////////////////////////////

#include "_inc_dd"

void main()
{
    //игрок, что нажал на рычаг.
    object oPC = GetLastUsedBy();
    //Имя скрипта обработки задавать не будем.
    if (!dd_Init(oPC,"Пример 1: Список всех объектов на локации","",10,FALSE))
    {
        //произошла ошибка инициализации (к примеру oPC - не игрок), выходим
        return;
    }

    object oObj = GetFirstObjectInArea(GetArea(oPC));
    while (GetIsObjectValid(oObj))
    {
        //в описание добавим имя объекта и его тег, значение будет пустым
        // - мы не собираемся обрабатывать выбранный элемент в этом примере.
        dd_Add(oPC,GetName(oObj)+"["+GetTag(oObj)+"]","-");
        oObj = GetNextObjectInArea(GetArea(oPC));
    }
    //запустить диалог.
    dd_Show(oPC);
}


Создадим на тестовой локации рычаг, ему на onUsed назначим этот скрипт.
Запускаем, при нажатии на рычаг «Пример 1» видим примерно такую картину.

(IMG:http://kaa.mhost.ru/nwn/img/dd-demo2_1.jpg)

Пример 2.

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

Скрипт первый, инициализация и заполнение диалога.

Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name dd_ex_inv_onuse
//:: FileName dd_ex_inv_onuse.nss
//:: Copyright © 2005 by _kaa_
//:://////////////////////////////////////////////
/*

    Пример использования dd.
    Позволяет просмотреть все предметы в инвентаре
    (в примере - инвентаря вызывающего) и сделать
    с выбранным какое-либо действие (обработка в
    скрипте dd_ex_inv_run
*/

//:://////////////////////////////////////////////
//:: Created By: _kaa_
//:: Created On: 27/10/2005
//:://////////////////////////////////////////////

#include "_inc_dd"

void main()
{
    object oPC = GetLastUsedBy();
    dd_Init(oPC,"Пример 2. Инвентарь","dd_ex_inv_run");

    object oItem =GetFirstItemInInventory(oPC);
    while (GetIsObjectValid(oItem))
    {
        dd_Add(oPC,GetName(oItem)+"["+GetTag(oItem)+"]",GetTag(oItem));
        oItem =GetNextItemInInventory(oPC);
    }
    dd_Show(oPC);
}


Скрипт второй, действие с выбранным элементом:

Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name  dd_ex_inv_run
//:: FileName dd_ex_inv_run.nss
//:: Copyright © 2004-2005 by _kaa_
//:://////////////////////////////////////////////
/*

    скрипт обработки инвентаря.
    тег выбранного элемента -
    string sTag = dd_GetLastValue(oPC);

*/

//:://////////////////////////////////////////////
//:: Created By: _kaa_
//:: Created On: 27/10/2005
//:://////////////////////////////////////////////

#include "_inc_dd"

void main()
{
    object oPC=OBJECT_SELF;
    string sTag = dd_GetLastValue(oPC);
    object oItem = GetItemPossessedBy(oPC, sTag);
    DestroyObject(oItem);

}


Пример 3.

Третий пример с точки зрения dd проще чем второй, но уже делает что-то полезное.
Задача: сделать систему порталов, при использовании портала он активируется и показывает список других, уже активированных порталов. При выборе портала из списка игрок переносится на выбранный портал.
Порталы должны работать и для сингла, и для мультика.
Порталы работают в обе стороны, но при наличии переменных работают а) только как выход б) только как вход в сеть.
Можно добавлять любое количество не пересекающихся между собой портальных «сетей», один тег – одна сеть.
Само собой нужно хранить список уже активированных порталов.

Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name dd_ex_port_onuse
//:: FileName dd_ex_port_onuse.nss
//:: Copyright © 2004-2005 by _kaa_
//:://////////////////////////////////////////////
/*
    Пример использования dd
    Система порталов. При использовании показывает
    список всех активных порталов, при выборе
    переносит игрока к выбранному порталу.
    Добавлено: усложним пример, сделаем систему
    порталов а-ля диабло, т.е. требующих предварительной
    активации, только потом будет доступен.

*/

//:://////////////////////////////////////////////
//:: Created By: _kaa_
//:: Created On: //2005
//:://////////////////////////////////////////////

//подключаем библиотеку с dd и функциями location -> string, string -> location
#include "_inc_dd"
#include "_inc_loc2str"

const int  DD_EX_SINGLE_MODE = 0;              //1 - если сингл, 0 - мультик
const string DD_EX_MULTI_TAG = "dd_ex_portal"//если мультик - ресреф и тег предмета, где будем хранить данные

const string DD_EX_COUNT = "dd_ex_count";      //имя переменной, где будем хранить количество уже запомненных порталов
const string DD_EX_PORTAL = "dd_ex_portal";    //префикс сохраненных переменных с локацией запомненных порталов
                                                //полное имя переменной будет DD_EX_PORTAL+DD_EX_



//получим объект, на который будем записывать локальные переменные
//для сингла вещь из инвентаря не подойдет, локальные переменные там не сохраняются,
//поэтому для сингла пишем на игрока.
object ex_GetObjectForSave(object oPC)
{
    //если сингл - вернем игрока и на нем будем писать переменные
    if (DD_EX_SINGLE_MODE) return oPC;
    //если мультик - найдем вещь в инвентаре у игрока с тегом  MULTI_TAG
    object oItem = GetItemPossessedBy(oPC,DD_EX_MULTI_TAG);
    if (GetIsObjectValid(oItem)) return oItem;
    //нету еще такой вещи - создадим
    oItem = CreateItemOnObject(DD_EX_MULTI_TAG,oPC);
    if (GetIsObjectValid(oItem)) return oItem;
    //кривой ресреф, нельзя создать вещь - ошибка.
    return OBJECT_INVALID;

}

//проверим, активен ли уже данный портал для игрока. если нет - сохраним
void ex_IsAlreadyChecked(object oPC, object oPortal)
{
    object oStore =  ex_GetObjectForSave(oPC);
    //проверим, есть ли у нас объект для записи переменных
    if (!GetIsObjectValid(oStore))
    {
        //ошибка, сообщим и выходим
        WriteTimestampedLogEntry("Error! Can't get object for store.");
        return;
    }
    //убедимся, что oPortal - действительно объект.
    if (!GetIsObjectValid(oPortal))
    {
        //ошибка, сообщим и выходим
        WriteTimestampedLogEntry("Error! oPortal is not valid object.");
        return;
    }

    //получим локацию портала в виде строки.
    string sLoc = LocationToString(GetLocation(oPortal));

    //с объекта oStore узнаем, сколько уже на нем есть записей.
    int n = GetLocalInt(oStore,DD_EX_COUNT);

    int i;
    if (n)
        for (i=0; i <=n; i++)
        {
            if (sLoc == GetLocalString(oStore,DD_EX_PORTAL+IntToString(i)))
                //нашли, выходим
                return;
        }
    //не нашли, надо запомнить и увеличить счетчик
    n++;
    SetLocalString(oStore,DD_EX_PORTAL+IntToString(n),sLoc);
    SetLocalInt(oStore,DD_EX_COUNT,n);
    //надо бы сюда добавить какой-нибудь визуальный эффект при добавлении.
    //для сингла пойдет анимация портала, для мультика - любой виз. эффект на игрока

    //а пока просто напишем игроку, что портал активирован
    FloatingTextStringOnCreature("Портал "+GetName(GetArea(oPortal))+"."+GetName(oPortal)+" активирован",oPC,TRUE);
}


void main()
{
    //Кто кликнул на портал
    object oLastUsed = GetLastUsedBy();
    //точно игрок кликнул на портал?
    if (!GetIsPC(oLastUsed))
        return;
    //если игрок еще в битве - сразу выходим, диалог все равно не запустится.
    //можно добавить вывод предупреждения.
    if (GetIsInCombat(oLastUsed))
        return;

    //инициализируем dd. для игрока oLastUsed()
    //приветствие диалога - "Порталы"
    //скрипт обработки - "dd_ex_port_jump"
    //размер "окна" - 10 (максимальное количество пунктов в диалоге, от 3 до 10
    //используем вариант без второго уровня диалогов, т.е. без подтверждения
    if (!dd_Init(oLastUsed,"Порталы","dd_ex_port_jump",10,FALSE))
    {
        //произошла ошибка инициализации, выходим
        return;
    }

/*
    //1. "простой" вариант, просто перебирает все плейсиблы-порталы.

    //найдем все порталы (все плейсиблы с тегом"dd_ex_portal")
    int n = 0;
    object oPortal = GetObjectByTag("dd_ex_portal",0);
    while (GetIsObjectValid(oPortal))
    {
        n++;
        if (oPortal != OBJECT_SELF && GetObjectType(oPortal) == OBJECT_TYPE_PLACEABLE)
            //и добавим пару (описание, значение) в диалог.
            //описание - название локации + имя плейсибла
            //значение - текстовое представление типа location, которое
            //не меняется при добавление\удаленние но зависит
            //от уникальности тегов локаций, если будут одинаковые теги
            //локации - телепорты будут глючить.
            dd_Add(oLastUsed,GetName(GetArea(oPortal))+"."+GetName(oPortal),LocationToString(GetLocation(oPortal)));
        oPortal = GetObjectByTag("dd_ex_portal",n);
    }
*/

    /*2. Чуть более сложный вариант, а-ля диабло. Портал требует активации, только потом доступен
      удаление уже активного портала из списка не планируется делать, если "приспичило" - просто
      удалите предмет, на который "сохраняются" переменные (для мультика)
    */


    //проверим, запомнен ли уже этот портал? если нет - запомним.
    ex_IsAlreadyChecked(oLastUsed,OBJECT_SELF);

    //получим объект, на котором хранятся переменные
    object oStore =  ex_GetObjectForSave(oLastUsed);
    //проверим, действительно ли у нас есть объект для записи переменных
    if (!GetIsObjectValid(oStore))
    {
        //ошибка, сообщим и выходим
        WriteTimestampedLogEntry("Error! Can't get object for store.");
        return;
    }

    //с объекта oStore узнаем, сколько уже на нем есть записей.
    //каждую запись добавим в диалог
    int n = GetLocalInt(oStore,DD_EX_COUNT);
    object oPortal;
    string sLoc;
    int i;
    for (i=1; i <=n; i++)
    {
        //читаем по очереди все сохраненные локации порталов.
        sLoc = GetLocalString(oStore,DD_EX_PORTAL+IntToString(i));
        //найдем объект (ближайший плейсибл к сохранненой локации)
        oPortal = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE,StringToLocation(sLoc));
        //и проверим, действительно ли это портал?
        if (!GetIsObjectValid(oPortal))
        {
            //ошибка, сообщим и выходим
            WriteTimestampedLogEntry("Error! Wrong saved location :"+sLoc);
            return;
        }

/*в этом месте можно добавить дополнительную проверку типа и тега объекта oPortal,  например если вы хотите сделать более чем одну "сеть" порталов. в примере все порталы имеют один тег, "dd_ex_portal".  если мы добавим проверку и будем требовать, чтобы тег портала, на котором кликнули  и тег "удаленного" портала совпадали, мы можем разбить порталы на непересекающиеся "сети" порталов:        //для этого нам нужно будет создать "синьку" (т.е. новый тип объектов в палитре модуля) нового типа порталов и сменить ему тег.
*/

        if (GetTag(OBJECT_SELF) != GetTag(oPortal)) continue;

/*проверим, если на портале есть переменная only_exit - значит можно на него прыгать, но не с него.чтобы не путать игроков - смените внешний вид плейсибла или каким-то другим способом дайте понять что он не работает
*/

        if (GetLocalInt(OBJECT_SELF,"only_exit"))
        {
            FloatingTextStringOnCreature("Портал работает только в одну сторону",oLastUsed);
            return;
        }
/*
проверим, если на портале есть переменная only_enter - значит можно c него прыгать, но не на него (т.е. в списке доступных порталов его не будет, хотя с него можно прыгнуть на другие)  чтобы не путать игроков - смените внешний вид плейсибла или каким-то другим способом дайте понять что он не работает
*/

        if (GetLocalInt(oPortal,"only_enter")) continue;

        //если не нужно выводить в диалог тот портал, по которому кликнули - добавим
        if (OBJECT_SELF != oPortal)
            //если все верно - запишем название локации и самого портала в диалог
            dd_Add(oLastUsed,GetName(GetArea(oPortal))+"."+GetName(oPortal),sLoc);
    }

    /*
посколько диалог идет "сам с собой", нужно пердусмотреть его закрытие. иначе "умные" игроки пойдут воевать с открытым диалогом, чтобы можно было "сбежать" из боя. поэтому запомним в переменной на игроке объект- портал и при запуске "action" проверим расстояние до него /
    */

    SetLocalObject(oLastUsed,"dd_ex_port_obj",OBJECT_SELF);

    //запустить диалог.
    dd_Show(oLastUsed);
}


Скрипт на этапе написания максимально подробно комментировался, надеюсь будет понятно.

Пока мы говорили только об использовании dd, теперь немного о самой библиотеки «_inc_dd»

Диалоги в НВН пока не умеют возвращать номер выбранного пункта в диалоге, поэтому единственный путь – выставить действие на каждый пункт и оттуда получить номер. Но это приводит к тому, что на 10 пунктов диалоге нужно 20 подобных, но все же отдельных скрипта.

Логическая структура выглядит примерно так:

(IMG:http://kaa.mhost.ru/nwn/img/dd-demo1_0.gif)

или если смотреть в тулсете то так:

(IMG:http://kaa.mhost.ru/nwn/img/dd-demo1_1.gif)

Все вызовы из скриптов ведут к функциям из “_inc_dd”, так удобнее их редактировать.
Версия dd на текущий момент – 0.1 альфа, тем не менее можно использовать. Если будут ошибки – я выложу исправления.
Отдельный .erf я не делаю, выкладываю пока только тестовый модуль с примерами, если кому интересно.

Вот тут можно найти тестовый модуль
  Форум: Шарды рунета · Просмотр сообщения: #55935 · Ответов: 4 · Просмотров: 10,992

_kaa_
Отправлено: Oct 28 2005, 14:22


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

Группа: Master
Сообщений: 437
Регистрация: 27.04.2004
Из: moscow
Пользователь №: 45


QUOTE (Fatum @ Oct 25 2005, 18:43)
Каа, что за однобокость? Одному, значит, можно чужой проект без причины оскорбить, а в ответ защититься нельзя?

Модераторы как ни странно тоже люди. Увидел наезды, переходы на личности - жми на кнопку "Модератору".
В этом топике разговор шел о том, как привлеч людей к крафту, а не где этот крафт лучше и кто есть кто. Если мои действия не понятны или вызывают вопросы - читаем правила топика, если вопросы остались - идем к руководству форума.
  Форум: Шарды рунета · Просмотр сообщения: #55887 · Ответов: 91 · Просмотров: 68,462

9 страниц V   1 2 3 > » 

Есть новые сообщения  Открытая тема (есть новые ответы)
Нет новых сообщений  Открытая тема (нет новых ответов)
Горячая тема (есть новые сообщения)  Горячая тема (есть новые ответы)
Горячая тема (нет новых сообщений)  Горячая тема (нет новых ответов)
Опрос (есть новые голоса)  Опрос (есть новые голоса)
Опрос (нет новых голосов)  Опрос (нет новых голосов)
Тема закрыта  Закрытая тема
Тема перемещена  Тема перемещена
 

Текстовая версия Сейчас: 19th March 2024 - 13:54