Помощь - Поиск - Пользователи - Календарь
Полная версия: ОДИНОЧНЫЙ ВОПРОС
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68
Alian REXis
Цитата(Desan @ Nov 7 2016, 21:09) *
MMORPG Style Respawner


Тут в базе есть скрипт нормальный. Раньше работал. http://www.city-of-masters.ru/forums/index...amp;#entry12810

Silvan Shu
Цитата(Aiwan @ Jan 10 2005, 23:33) *
Всем одиночные вопросы не по делу постить в эту тему. Если сомневаетесь нужна ли тема, то постите вопрос сюда.
Типа: вот у меня мышка не кликает на тулсете crazy.gif


кстати о мышках. в тулсе я новичок - прям-таки профан. в самом неудачном смысле. начал тут переводить один мод. вопрос - как мне сохранить в отдельной папочке все переведенные файлы чтоб скинуть на другой комп или просто кому-то? =)

как редактировать (читай-добавлять субтитры) вступительные ролики расширения .bin? засим благодарю!
Melisse
когда открывается модуль в тулсе, в папке modules создается папка temp со списком всех файлов. Оттуда можно вытаскивать нужный файл и потом точно так же добавлять в другой мод (после добавления в другой модуль, нужно сохраняться и перезапускаться, чтобы обновились списки, а для палитры - нужно в обновлять палитру, через правая кнопка - обновить палитры).
Файлы *.bin - попробуй поискать редакторы на ваулте ( https://neverwintervault.org )
Chiffa
Всем привет! Рад, что форум живет и здравствует.
А теперь вопрос. Как и раньше у меня, дурацкий но ... нада...
Как правильно запретить герою отдыхать везде, кроме триггеров рестзоны? С настройками модуля, скриптами диалогами, вейпами повозился достаточно. Короче, все, что мог сам - сделал, иначе бы не спрашивал. Проделал детский эксперимент: импортировал локацию из своего модуля сначала в ПЛ, потом в "Рыцарскую сагу". В обоих модах герой ведет себя прилично, на мостовую или в поле не присаживается. Везде, кроме это добавленной локи. В ней он отдыхает также строго через диалог, но ... везде и всюду! Даже под водой, так его! biggrin.gif
Понял, что дело именно в локе. Но вот чем она принципиально отличается от ПЛ-овских или Саговских - не понял. На мой взгляд - ничем. Подумал, может, есть какой специальный полезный скрипт, который перебирает теги локаций? Стал искать - не нашел. Решил, что это глупая идея, собака порылась в чем-то другом.
Но вот в чем именно?
denis0k
При отдыхе срабатывает событие OnRest, и запускается соответствующий модульный скрипт. Кинув на игрока ClearAllActions(), отдых можно прервать.
Chiffa
Уважаемый denis0k, спасибо, что так быстро откликнулись. Рад, что Вы, ветеран форума ГМ, остаетесь ему верны. Это пишу без малейшей иронии.
Вот только спрашивал я немного о другом. Точнее, о противоположном. Не о том, как регулировать отдых или прервать его, а как запретить отдых везде, кроме триггеров рестзоны. Со скриптом "module_rest", который стоит на "OnPlayerRest" событий модуля у меня все в порядке. В ПЛ и "Рыцарской Саге", надо полагать, тем более. А именно к этим модулям я добавлял свою локацию для проверки. И, как уже писал, во всех локациях ПЛ и Саги герою разрешен отдых только в триггерах. В моей же, добавленной локе он отдыхает почти по биоваровскому дефолту. Только диалог срабатывает, а так где угодно может присесть и отдохнуть.
Событие "module_rest" распространяется на весь модуль, так? Получается, что ошибка именно в этой добавленной локации? Или все-таки в чем то еще? И я хочу понять, что надо добавить (или убрать), чтобы все заработало корректно.
Кидать на игрока ClearAllActions() на входе в каждую локу? Но ни в ПЛ, ни в Саге ничего подобного нет. Но все-таки на всякий случай я кинул на ПС ClearAllActions() при входе в локу. Не помогло. Все равно дрыхнет где вздумается.
Конкретизирую вопрос: что еще, кроме регулирующего скрипта в событиях запрещает отдых везде, кроме триггеров зоны отдыха? Может, какой-то вейп? Или глобальный скрипт? Или еще что?


Melisse
Он все правильно вам сказал. Используйте и отредактируйте скрипт модульного события на отдых в слоте OnPlayerRest. На старт отдыха, делайте проверку на нахождение в триггере, если нет - ClearAllActions()
Если подобное реализовано в скрипте Рыцарской саги, посмотрите как это сделано там.

Примерно это выглядит так:

Neverwinter Script
// prevents a PC from resting
// period
void main()
{
    object oPC = GetLastPCRested();
    // capture begin rest attempts
    if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
    {
          // fun, fun, fun!
        object oTrigger = getNearestObjectByTag ("REST", oPC);
        if (!GetIsObjectValid (oTrigger))
          AssignCommand(oPC, ClearAllActions());
        else
        {
              if(!GetIsInSubArea (oPC, oTrigger))
                  AssignCommand(oPC, ClearAllActions());
        }
    }
}


https://nwnlexicon.com/index.php?title=OnPlayerRest
Chiffa
Цитата(Melisse @ Oct 27 2017, 08:46) *
Он все правильно вам сказал.

Уважаемая Melisse, да разве кто спорит? Все мастер сказал коротко, ясно и верно. И скрипт, начало которого вы любезно привели в качестве примера, тоже понятен. А вот начало скрипта Геннадия из "Саги":
Neverwinter Script
///////////////////////////    START      /////////////////////////////////////
if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
  {
    if (!GetIsAreaNatural(GetArea(oPC)))
      {
        if (GetLocalInt(oPC, "RESTZONE") == 0)// ÂÍÅ ÇÎÍÛ ÎÒÄÛÕÀ
        {
        FloatingTextStringOnCreature("Îòäûõ çàïðåùåí! Íóæíî íàéòè êîìíàòó.", oPC);
        AssignCommand(oPC, ClearAllActions());
        AssignCommand(oHench, ClearAllActions());
        return;
        }
      }

Кракозябрики капсом тут "ВНЕ ЗОНЫ ОТДЫХА", но, ПМСМ, и без русских комментов все яснее ясного. У нас с вами, уважаемые мастера, получается как в анекдоте про бедного студента: "Профессор, объяснить я сам могу, я ПОНЯТЬ хочу!" Понять, в чем "провинилось" именно моя локация, которую я импортировал и в ПЛ, и в "Сагу". Почему корректные, верные, сто раз проверенные (аж с 2004 гола!) скрипты настроек модуля ее в упор не видят.
Довел эксперимент вообще до абсурда. Импортировал по одной локе из ПЛ в "Сагу" и наоборот. Специально выбрал самые простенькие, без "лишних" вейпов и плейсов. Все работает прекрасно. Скрипт "Саги" видит и обрабатывает "Дом в Прокампуре", скрипт ПЛ прекрасно принял домишко из поселка Большие Сети. Обе импортированных локи не имели триггеров зон отдыха. Нарисовал. Зарабатали.
Моя локация ничем принципиально не отличается от оригинальных. Ее скрипт не хочет обрабатывать. Мистика?
На всякий случай спрошу: уважаемые мастера, вы абсолютно уверены, что кроме правильного скрипта настроек "module_rest" больше ничего не требуется? Конкретно для локаций.
Ну и попробую биться дальше сам. Потому что Ваши, уважаемые мастера, объяснения верны для стандартных ситуаций, а у меня дичь какая-то... но вообще на всякую дичь я всегда был везучим.
Спасибо.
denis0k
Есть возможность отменять отдых. Есть возможность проверять разные условия. Профит smile.gif Теперь немного подробнее.

if (!GetIsAreaNatural(GetArea(oPC))) <-- это значит, что локация не "естественная" (природа), эта настройка включается в свойствах локации.
if (GetLocalInt(oPC, "RESTZONE") == 0) <-- это значит, что при нулевой переменной на игроке (или её отсутствии вовсе), отдых отменяется.

Значит, как-то надо выставить RESTZONE не в 0 (например, в 1). Мне думается, в модуле есть на полу триггеры, которые на вход в него ставят эту локалку на игрока в 1, а при выходе - в 0. Это и будет зона отдыха. Подробнее описать наверно не смогу.
Chiffa
Цитата(denis0k @ Oct 27 2017, 19:13) *
Подробнее описать наверно не смогу.

И не надо, смысл я понял. И вообще разобрался. Хочется ругаться трехъетажным (на биотварей), но щас... выдохну... и просто скажу спасибо, уважаемый denis0k и уважаемая Melisse за понимание, участие и желание помочь.
Все вы говорили верно, мастера. И ничего дополнительно не требуется для нормального отдыха кроме одного-единственного правильного скрипта в настройках.
Короче, я скачал невер старой версии, ПЛ-овской. Сделал новый пустой модуль и тупо кинул в его настройки скрипт "module_rest". Только его, на остальные настройки плюнул. И все состоялось! Герой пытается присесть, а ему фиг по всей глупой роже. biggrin.gif
Но самое смешное - дальше. Прежние свои опыты я проводил (и вообще пытался делать модуль) в "лошадках". Так вот, переписываю этот пустой модуль с единственной настройкой в эти самые "лошадки". Все корректно! Больше того, подрисовываю еще одну пустую локу уже в "лошадках". Перевожу ПС уже в нее. И опять все корректно, все ок!
И вот вопрос (риторический, ясен пень) как это все прикажете понимать?! Ведь в локах, "подрисованных" к ПЛ и "Саге" (созданных в той же версии, что и мой пустой мод!) в "лошадках" ничего не работало. Да и сейчас не работает...
Еще раз спасибо, мастера, а биотварям отдельный респект и побольше икоты по ночам. vava.gif Надеюсь, моя одиссея с экспортом-импортом локаций и настройками и без них правильного скрипта повеселит форумчан.
denis0k
Цитата
Хочется ругаться трехъетажным (на биотварей)
Обещаю, это только начало biggrin.gif
Chiffa
Цитата(denis0k @ Oct 27 2017, 20:23) *
Обещаю, это только начало biggrin.gif


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


Дико извиняюсь, что напрочь зафлудил тему, но необходимо сказать: denis0k, отдельное спасибо за последнюю подсказку. Все оказалось даже еще проще. Не требуется нигде писать "if (!GetIsAreaNatural(GetArea(oPC)))", достаточно пометить любую локацию как "тип земли - искусственный". Ерунда получалась в основном из-за того, что я пытаюсь сочинить робинзонаду, скачав с WRG замечательную систему крафта PaiNt_craft. Ну и, понятно, у меня локи все поля-леса и прочие тропики. Помечать их как искусственные не сразу придет в голову. unsure.gif
Так что зря я гнал на биоварей... хотя нет, они не этим, так многим другим заслужили!
Aiwan
Да у Биоварей полно пасхалок. Однажды я неделю бился над проблемой, в маленьких локациях спавнились одни и те же монстры в случайных генерациях. После недельного выноса мозга, оказалось, движок генерит случайные числа исходя из данных тайлов в локации. Это значит, если я тупо скопировал пять локаций 4х4 тайла, то в них будут тупо выпадать одинаковые "случайные" числа а это значит одинаковые монстры. Вот такие пироги.
denis0k
Удивительный факт в том, что сделать нормальный рандом вообще проще, чем городить свой. Там в параметре просто время указывается, оно каждую секунду уникально, но биовари замутили туда данные локации. Это телодвижение должно иметь какой-то смысл smile.gif Ну либо я ищу чёрную кошку в тёмной комнате, которой там нет, и они просто рукожопые индусы, во что тоже можно поверить, т.к. их SWTOR не имеет юникода в чатике, да и вообще глючит, если ставить в папку с русскими символами в пути biggrin.gif
Chiffa
С позволения мастеров продолжу веселить их дурацкими вопросами. Но что делать, если поиск и в темах, и расширенный по всему форуму ответа не дал...
Можно ли скриптом заставить героя вытаскивать из инвентаря определенный (по тегу, рефу, богу, черту ets) вид оружия и имитировать атаку на плейс? Именно имитировать, а не атаковать всерьез. У меня по команде
Neverwinter Script
AssignCommand(oPC, DelayCommand(0.5, ActionEquipMostDamagingMelee()));
// Далее - атака.

понятно, что произошло. Герой-тестер выхватил из инвентаря самое крутое оружие, которое имел и разнес горемычный булыжник с воплем "Я раздавлю тебя!". А это был не просто булыжник, а целый "выход горной породы", из него каменной киркой кремень для робинзонады добывать, а герой с ним так непочтительно. (Что любопытно, орал, негодяй, по-русски biggrin.gif ).
Нет, можно было защитить булыгу галкой "сюжет", но тогда жалобный дефолтный скулеж героя и постоянно всплывающее "оружие неэффективно" бесит и портить всю атмосферу.
В константах такого понятия как "анимация атаки", ПМСМ, вообще не существует. Что применить наиболее похожее? Я нашел только "ANIMATION_LOOPING_TALK_FORCEFUL", но это вроде то же самое, что галка на "говорить убедительно" в графе "другие действия" диалога? Попробовал применить. Получилось, сорри за каламбур, неубедительно...
Заранее благодарен.
З.Ы. Понимаю, что пост скорее для темы "вопросы новичков", но я вроде как 9 лет на форуме, хотя бы и с перерывом... Впрочем если уважаемый модератор перенесет пост туда - никаких вопросов.

Пока писал, подумал... такое случается...
Не обязательно имитировать, можно и натурально атаковать. Поставлю этой булыге максимум ХП, нарисую рядом пару-тройку таких-же. Атаковать будет с перекурами, присаживаясь и жалуясь на тяжелую жизнь шахтера, это я умею (и написать, и пожаловаться biggrin.gif). Главное, чтобы выхватывал из инвентаря именно каменную кирку (простой молот без бонусов), а не "каменный нож +1". Вот как это сделать - без понятия...
Aiwan
Атаковать можно невидимого монстра или невидимый плейс, естесвенно с плотовым флажком.
Насчет того, что бы одеть нужный меч в нужный слот. В модуле Монета Судьбы, посмотри скрипты проклятых и сюжетных комплектов броней. Именно в них прописано, в какой слот РС одевает предмет с нужным тегом. НВН нет и я по памяти это не напишу. Там все сделано, как тебе нужно. Идет проверка инвентаря, потом снимается с игрока все в боевых слотах, и одевается комплект уникальных. А если комплект проклят, то снять предмет нельзя. Ради интереса кинь в обычную локу кучу уникального оружия и по надевай его увидишь эффект поймешь как работает.


п.с. Вспомнил, это касается в основном проклятых вещей. Комплект ты сам одеваешь.
Chiffa
Спасибо, уважаемый Мастер! Уже копаюсь в хаках "am_x2_main.hak" и "am_x2_weapon.hak" (модельки тоже интересны) и сокрушаюсь, почему сам до этого не додумался. Основную проблему вряд ли этим решу. Не припоминаю, чтобы проклятое оружие само (то есть по приказу скрипта, ясен пень) прыгало в руку. Вроде бы это один раз делает Эсмерик-меч. Но, во-первых не факт, что я помню правильно (в Хорды, в отличие от "Монетки", которую юзаю довольно часто, играл лет десять тому). Во-вторых, рыться в дефолтных скриптах биотварей?! Может, я лучше пойду вагон уголечка разгрузить, нервных затрат на порядки меньше и точно знаешь, что рано или поздно результат будет. swoon.gif
Тем не менее уверен, что накопаю много полезного (в хаках "Монетки", не подумайте, что в "Хордах" biggrin.gif ). Отдельное спасибо за привычку коротко комментировать практически каждый скрипт.
Да, "кровавый меч Lexа" тоже, пожалуй, стоит глянуть?
И можно попросить еще одну подсказку, уважаемые мастера? Где поискать что-то похожее на скрипт выдачи вещей с палитры, но с процентным шансом? То есть мой робинзон долбит эту булыгу (монстра, плейс - не суть) и у него 90% шанса добыть кремень, 9% на то, что выпадет к примеру, малахит, и 1% - изумруд или алмаз, тоже не суть.
И последний (на сегодня) вопрос. Наверное, конкретно к Вам, уважаемый Aiwan. Систему PaiNt_craft я, похоже, ниасилил (или она меня, подробности в соответствующей теме на WGR). Скрипты крафта придется занимать у доброй тети Опары и дяди Железнорукого. А вопрос насчет таблички "craftingrecipes.2da". Когда не надо брать за крафт деньги и не требуется нескольких дней (робинзон же, сам же все крафтит и сам себе, ясен пень не платит) что надо писать в соответствующих графах таблички: нули, пять звездочек, "NONE" или еще что? Потому что замена в Великом Плейсе Крафта CRAFT_HEALPER "WP" на "INSTANT", которую обещал так рано покинувший нас DBColl, не работает. По крайней мере, в моем модуле не работатет.
Ответьте, если припомните, конечно. Если нет, сам проверю, муторно, но понятно что делать.
Спасибо.

Aiwan
Цитата(Chiffa @ Oct 31 2017, 23:04) *
Не припоминаю, чтобы проклятое оружие само (то есть по приказу скрипта, ясен пень) прыгало в руку. Вроде бы это один раз делает Эсмерик-меч.

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

Цитата(Chiffa @ Oct 31 2017, 23:04) *
И можно попросить еще одну подсказку, уважаемые мастера? Где поискать что-то похожее на скрипт выдачи вещей с палитры, но с процентным шансом? То есть мой робинзон долбит эту булыгу (монстра, плейс - не суть) и у него 90% шанса добыть кремень, 9% на то, что выпадет к примеру, малахит, и 1% - изумруд или алмаз, тоже не суть.

В ПЛ посмотри на ящиках и сундуках, выпадают плотовые вещи с рандомом. Например, в пещере Рэджика, там в зависимости от евила и класса дается уникальная шмотка.


Цитата(Chiffa @ Oct 31 2017, 23:04) *
Отдельное спасибо за привычку коротко комментировать практически каждый скрипт.

Это сделано по двум причинам, для себя и для таких случаев как сейчас. snoozer_17.gif
Chiffa
Ай да Aiwan! Ай да ... почти Пушкин, скажем так...
Спасибо огромное. Вот он, скрипт:
Neverwinter Script
object oPC = GetFirstPC();
object oItem=GetItemPossessedBy(oPC, "ITM_MOLOT");
object oBul = GetObjectByTag("BULYGA");
void main()
{
AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_RIGHTHAND));
DelayCommand(0.0,ActionPauseConversation());
DelayCommand(1.0,AssignCommand (oPC,ActionAttack(oBul)));
DelayCommand(2.0,AssignCommand (oPC,ActionAttack(oBul)));;
DelayCommand(4.0,ActionResumeConversation());
}

И правда простой, как мычание. Пять минут писанины и еще пять на проверку в модуле "Полигон". Ясен пень, тут еще много чего до ума доводить, эффект замедления вешать, давать в инвентарь вещички с палитры, "перекуривать" и т.п., но уж с этим я худо-бедно справлюсь. Главное, что удалось впихнуть эту злополучную "кирку" в этот неладный SLOT_RIGHTHAND. Остальное преодолимо.
Спасибо насчет подсказки про пещеру Реджика. Пойду гляну...
З.Ы. Сорри за офтоп. Aiwan, у тебя что вообще никакого невера? Даже ПЛ и родной "Монетки"? То есть никакой ностальжи, никаких сантиментов? Не-нет, подпись твою я вижу, вопрос риторический...

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

З.Ы.Ы. Последняя реплика "приклеилась" к общему посту, потому поясняю: речь о скрипте рандома с шансом.
Aiwan
Цитата(Chiffa @ Nov 1 2017, 02:14) *
З.Ы. Сорри за офтоп. Aiwan, у тебя что вообще никакого невера? Даже ПЛ и родной "Монетки"? То есть никакой ностальжи, никаких сантиментов? Не-нет, подпись твою я вижу, вопрос риторический...

Я полностью ушел в реал, игр нет совсем. Точнее по инерции еще качаю иногда, но дальше установки не идет smile.gif Из игр остался только симулятор радиоуправляемых моделей ну и с сыном в НХЛ играю на PS4. wink3.gif
Chiffa
Aiwan, вопрос лично к тебе. Он может казаться странным, а в свете того, что на дворе 2017 год, так и вовсе нелепым, но тем не менее...
Решал дать денек отдыха своему робинзону и сел поиграть. Представь себе, в ПЛ. Такое иногда случается. Во всяком случае, со мной.
Так вот, минут за 10 игры мне пришлось трижды вызывать диспетчер задач, чтобы он прихлопнул НВН. Как только на Прокампур опускалась ночь, я нервно нажимал кнопку быстрого сохранения чуть ли не каждую минуту...
А все из-за печально-знаменитого непися-бандита. Он спавмится, подвешивает игру и идет по своим делам. Вместо того, чтобы нападать на героя, как это и задумано, изображает бродячего непися-обывателя.

Вот скрипт на последнем слоте бандита:
Neverwinter Script
#include "nw_i0_generic"
#include "mm_common"

void main()
{
    int nEvent = GetUserDefinedEventNumber();
    if (nEvent == 1002)
    {
        object oPC = GetLastPerceived();
        if (GetIsPC(oPC) && GetLastPerceptionSeen() && GetTag(OBJECT_SELF) == "SEWER1_BANDIT1")
        {
            SpeakString(ya("Это же то животное, что на менйа плюнуло!.. Убью!!!"));
            AssignCommand(oPC, PlaySound("vs_nhalorm1_bat2"));
            object oNPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF);
//            AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN
G, 1.0f, 6.0f));

            DelayCommand(1.0f, AssignCommand(oNPC, SpeakString("Хе-хе-хе...")));

            AssignCommand(oNPC, AssignCommand(oPC, PlaySound("vs_fvengaum_haha")));
            return;
        }
        else if (GetIsPC(oPC) && GetLastPerceptionSeen() && GetTag(OBJECT_SELF) != "SEWER1_BANDIT1")
        {
            if (!GetIsInCombat() && !IsInConversation(OBJECT_SELF))
            {
                SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS, FALSE);
                SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMA
TIONS, FALSE);
                if (Random(4) == 0)
                    SpeakString("Эй ты, стой!..");
                SetCutsceneMode(oPC);

                vector vD = GetPosition(OBJECT_SELF) - GetPosition(oPC);
                float fDir = VectorToAngle(vD);
                AssignCommand(oPC, ClearAllActions());
                AssignCommand(oPC, SetCameraFacing(fDir, 8.0, 50.0, CAMERA_TRANSITION_TYPE_MEDIUM));
                AssignCommand(oPC, SetFacing(fDir));

                ClearAllActions();
                ActionForceMoveToObject(oPC, TRUE);
                ActionDoCommand(SetCommandable(TRUE));
                ActionDoCommand(SetCutsceneMode(oPC, FALSE));
                ActionStartConversation(oPC, "bandit", TRUE, FALSE);
                DelayCommand(0.1, SetCommandable(FALSE));
         
            }
        }
    }
//Дальше реплики драки, которые тут не играют значения и не имеют роли


Так вот, вопрс: что именно и куда вписать, чтобы эта чертова "ClearAllActions();" соскочила с героя, если:
- бандит отошел далеко и уж точно не нападет.
или
- просто не нападает, допустим, 10-15 секунд реального времени.
К примеру, достаточно будет написать в конце перед тремя галками: "DelayCommand(22.0,ActionResumeConversation())
;" или надо как-то более иначе?
Разумеется, я и сам могу покопаться, (исправил же в свое время "легендарный" квест с доилкой!). Но:

У меня нет твоего опыта, а следовательно, уверенности что делаю правильно. С моей кармой скорее получится усугубить, чем исправить. Проверять сложно, эти бандюки то пропадают неделями, то вдруг начинают лезть из всех щелей, как тараканы.
Во-вторых, ты, наверное, единственный из команды создателей ПЛ, который еще активен на форуме ГМ. Кого еще спрашивать?

З.Ы. Ради прикола: самая дисциплинированная непись в ПЛ - бандит. Он накогда не лезет в триггер на сточной канаве. То есть если он отспавмился, а между ним и героем эта канава - все! Считай, висяк гарантирован. А простые быватели шастают по этим канавам как придется, и плевать им на триггеры...

З.Ы.Ы. Так что лучше второй вариант, тупо на время. А то ПС и бандит могут часами стоять рядышком и любоваться друг на друга через канаву...
Aiwan
Во первых, к этому скрипту подрублены две инклюды, а это тоже скрипты. Причем вторая инклюда кастомная от ДБа наверное. ДБ автор скрипта и я никогда не лазил в нем и не проверял его smile.gif Так как я и ДБ это как юный падаван и джедай smile.gif Если хочется узнать что и как работает, разбирайся сам. Для этого, после каждого действа поставь в скрипт событие, типа в командную строку сообщение или текст над НПС. Тогда ты будешь видеть, что происходит и где затык случается. Найди в монетке мой скрипт am_inc_debug, там простые условия для отладки скриптов. Добавляй из него функции в скрипты и проверяй отлаживай работу.
Прописывается она так
Neverwinter Script
#include "am_inc_debug"

Вот такой скрипт надо создать в палитре скриптов, он будет браться автоматически.
Neverwinter Script
//::///////////////////////////////////////////////
//:: Name: am_inc_common
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
          БИБЛИОТЕКА ДЛЯ ОТЛАДКИ СКРИПТОВ
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan      Aiwan@e-mail.ru
//:: Created On: 30.05.2005
//:://////////////////////////////////////////////

// СООБЩЕНИЯ ДЛЯ ПРОВЕРКИ (ИСПОЛЬЗУЮТСЯ В СЛУЖЕБНЫХ ЦЕЛЯХ ДЛЯ ОТЛАДКИ КОДА СКРИПТОВ)
// А ТАК ЖЕ ДЛЯ ДМ-ов
// LocalInt - "DEBAG_PC" на модуле, отключит дебаг игрокам
// LocalInt - "DEBAG_DM" на модуле, отключит дебаг DM-ам
void Debug(string message);
// Выводит в Debug: TAG, ResRef и Name объекта.
void DebugObject(object oObject);

//------------------------------------------------------------------------------
void Debug(string message)
{
    object oPC = GetFirstPC();
    if (!GetLocalInt(GetModule(), "DEBAG_PC"))
    {
      SendMessageToPC(oPC, "Debag message: "+message);
    }
    if (!GetLocalInt(GetModule(), "DEBAG_DM"))
          {
            SendMessageToAllDMs("Debag message to DMs: "+message);
          }
}
void DebugObject(object oObject)
{
    string sTag = GetTag(oObject);
    string sResRef = GetResRef(oObject);
    string sName = GetName(oObject);
    Debug ("TAG = "+sTag+", ResRef = "+sResRef+",  Name = "+sName+".");
}
/*
void main(){}


Что такое инклюда есть в моем мануале, почитай, если забыл.

Пример использования:
Neverwinter Script
//:://////////////////////////////////////////////////
//:: X0_CH_HEN_DEATH
//:: Copyright © 2002 Floodgate Entertainment
//:://////////////////////////////////////////////////
/*
  OnDeath handler for henchmen ONLY. Causes them to respawn at
  (in order of preference) the respawn point of their master
  or their own starting location.
*/

//:://////////////////////////////////////////////////
//:: Created By: Naomi Novik
//:: Created On: 10/09/2002
//:://////////////////////////////////////////////////
#include "x0_i0_henchman"
#include "am_inc_debug"
#include "am_inc_cutscene"

void main()
{
    // Handle a bunch of stuff to keep us from running around,
    // dying again, etc.
    PreRespawnSetup();

    // Call for healing
    DelayCommand(0.5, VoiceHealMe(TRUE));

    // Get our last master
    object oPC = GetLastMaster();
    object oSelf = OBJECT_SELF;


    // Clear dialogue events
    ClearAllDialogue(oPC, OBJECT_SELF);
    ClearAllActions();

    SetLocalLocation(oSelf, "POINT_DEATH", GetLocation(oSelf));
    //--------------------------------------------------------------------------
    //  Если РС умер или у нас отключен дебаг, то помощник умрет. В противном
    //  случае воскреснет рядом.
    //--------------------------------------------------------------------------
    if(!GetIsObjectValid(oPC) || GetIsDead(oPC) == TRUE)
    {
    if(GetTag(GetItemInSlot(INVENTORY_SLOT_NECK,oSelf))=
="AM_MNECK_AZUTH")
    {
        effect eEffect1 = EffectVisualEffect(VFX_FNF_SOUND_BURST_SILENT);
        AssignCommand(oSelf, ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect1, oSelf));
        DelayCommand(0.7, RespawnHenchman());
        DelayCommand(0.9, PostRespawnCleanup());
        DelayCommand(1.5, AddCutEffects(oSelf));
        DelayCommand(3.0, AssignCommand(oSelf, JumpToObject(GetWaypointByTag("AM_WP_AZUTH_RESPAWN"))));
        DelayCommand(6.0, RemoveCutEffects(oSelf));
        Debug("Алишан в храме Азута. Забирайте ее там.");
        return;
      }
      if(!GetLocalInt(GetModule(), "DEBAG_PC"))
      {
          DelayCommand(1.0, RespawnHenchman());
          DelayCommand(1.5, PostRespawnCleanup());
          DelayCommand(1.9, AssignCommand(oSelf, JumpToLocation(GetLocalLocation(oSelf, "POINT_DEATH"))));
          DelayCommand(2.1, AddHenchman(GetFirstPC(), oSelf));
          Debug("ВЫ В РЕЖИМЕ ТЕСТА. ВАШ ПОМОЩНИК НЕУБИВАЕМ.");
          return;
      }
    else
    //--------------------------------------------------------------------------
    //  Умерла, так умерла... =)
    //--------------------------------------------------------------------------
          {
            SetPlotFlag(OBJECT_SELF,FALSE);
            SetImmortal(OBJECT_SELF, FALSE);
            SetIsDestroyable(TRUE, FALSE, FALSE);
            DestroyObject(OBJECT_SELF, 0.2);
          }
    }
}
Chiffa
Мдя... как сложно то все. Я ведь всерьез думал, что две строчки кода приписать - и все океюшки будет. vava.gif
Теперь понятно, почему Ви в госпиталь уложили. Нет, Каетан тоже, конечно, хороша, но против Ви...
Ладно, раз джедая нет, падавану не до этого - фиг с ним, с бандитом. Не полному же чайнику (это обо мне, если что) его отлаживать. Да еще после джедая. Не настолько я самонадеян. В конце-концов, не так часто играю в ПЛ, прокампурское начало пережить можно.
А вот за подсказку методы - спасибо большое. Воспользуюсь неприменно. Как раз именно то, чего мне не хватает. Делаю все больше по интуиции и методом тыка. А эти тыки отнимают слишком много времени и нервов. Спасибо.
lolic99
Всем здрасьте.
Вопрос не то чтобы очень тупой, разве что в перспективе.
Облазил просторы нета, но нигде не нашел ответа на простой вопрос - где найти мод, позволяющий в оригинальной компании первого NWN нанимать более одного стандартного хенча одновременно.
Аддоны все стоят, но нужно чтобы можно было собрать партию именно в самой первой компании. Есть масса отсылок на SetMaxHenchman (который не факт что будет работать в ОС), и большое количество дохлых ссылок на этот вопрос, в частности на форум биоваров. Но рабочего мода не нашел нигде.
К сожалению, даже henchai 1.08 такой возможности не добавляет. Очень, очень прискорбно.

Вроде бы вопрос решил. Всего то надо было отредактировать скрипт диалога (nw_ch_action13), он общий для всех хенчей, добавить туда SetMaxHenchmen и выкинуть зануление текущего хенча.
Теперь гуляю в оригинальной кампании со своей небольшой армией.
lolic99
Теперь другой вопрос.
Получилось сделать так что все хенчи теперь корректно переходят между главами, при этом не теряя снарягу, которую выдал им ранее. Проблема в том что для этого пришлось отредактировать скрипты в каждом чаптере оригинальной кампании. А они, как известно, из папки Override не подсасываются, приходится лезть в nwm файлы, что очень не нравится.
Можно ли как то оверрайдить скрипты глобально, не редактируя модули? Я так понимаю - хак паки тоже требуют подключения через тулсет в сам модуль?

И в догонку. Можно ли скриптом поправить пенальти к экспе за большую команду? В оригинальной кампании нвн2 размер партии не влияет на количество получаемого опыта, в нвн1 же каждый хенч, саммон и фамильяр откушивает изрядный кусок. А при большой партии вообще достаются крохи. Это как то настраивается?
Melisse
хакпаки или оверрайд, если не хочется менять именно скрипты в модуле

Цитата
И в догонку. Можно ли скриптом поправить пенальти к экспе за большую команду? В оригинальной кампании нвн2 размер партии не влияет на количество получаемого опыта, в нвн1 же каждый хенч, саммон и фамильяр откушивает изрядный кусок. А при большой партии вообще достаются крохи. Это как то настраивается?

В оригинале используется стандартная система опыта по днд 3.0, но с пониженным процентом, она редактируется через свойства модуля в тулсете.
Если хочется вносить разные штуки - нужно писать свою систему опыта и запускать ее на смерть моба, но для этого придется менять скрипты и как-то их подгружать одним из способов выше, если нет желания менять именно скрипты модуля.
lolic99
Цитата(Melisse @ Dec 19 2017, 16:42) *
хакпаки или оверрайд, если не хочется менять именно скрипты в модуле

Так в том и вопрос, как это сделать не меняя сам модуль модуль. Хакпаки нужно натягивать в модуль через тулсет, а оверрайд вообще перекрывает только Core скрипты, не скрипты модуля.
Получается, собственно, что кроме как редактированием модуля кампании никак не обойтись. Обидно, потому что правок мало - только сохранение хенчей в базу данных компании при завершении чаптера и восстановление при начале нового. Бегаю с модом Henchman Inventory and Battle AI Mod, обвешивать хенчей хабаром приходится самому, потому терять его между чаптерами совсем не радует.
Сам скрипт, отвечающий за наем нескольких хенчей, относится к Core и оверрайдится без проблем. А вот скрипты начала/конца чаптеров, разумеется, оверрайдить не выходит.
Цитата
В оригинале используется стандартная система опыта по днд 3.0, но с пониженным процентом, она редактируется через свойства модуля в тулсете.
Если хочется вносить разные штуки - нужно писать свою систему опыта и запускать ее на смерть моба, но для этого придется менять скрипты и как-то их подгружать одним из способов выше, если нет желания менять именно скрипты модуля.

Да, так и сделал, повесил на смерть моба, только не свою систему опыта а пересчет Experience point scale (SetModuleXPScale) в зависимости от размера партии. Т.е. при размере группы 1 он равен 10, как и в дефолтной кампании, и увеличивается на 2 с каждым новым членом группы, включая саммонов. Не совсем точная замена, но разница там пренебрежительна. Поскольку евент генерится до того как фактически начисляется экспа - всегда имею достаточно скомпенсированное значение.
К сожалению, способ не самый изящный, надеялся что этот функционал просто можно отключить в настройках модуля, как в NWN2.

К счастью, по крайней мере скрипт, висящий на этом евенте, оверрайдится без проблем.
denis0k
Приоритет овера наивысший. Либо это баг, либо какая-то непонятная фича. Я синглом никогда не занимался, не знаю.
Цитата
Не совсем точная замена, но разница там пренебрежительна.
Экспа менялась от патча к патчу ещё. Оригинальную кампанию можно было закончить от ~15 до 20-го уровня, смотря на каком патче проходить.
lolic99
Цитата(denis0k @ Dec 21 2017, 07:45) *
Приоритет овера наивысший. Либо это баг, либо какая-то непонятная фича. Я синглом никогда не занимался, не знаю.
Экспа менялась от патча к патчу ещё. Оригинальную кампанию можно было закончить от ~15 до 20-го уровня, смотря на каком патче проходить.

Это не TES, оверрайд папка не имеет наивысшего приоритета, модульные скрипты перекрывают.
Мнения патчей я менять не собираюсь, всего лишь хочу вернуть нормально начисление экспы на одного перса.
denis0k
Ага, посмотрел вики, овер действительно в приоритете на 3-м месте из 4. Забавно, но я отчётливо помню, как через него в своё время менял шардовые ресурсы smile.gif Тогда да, вариант всего один - правка модулей.
Melisse
там какая-то кривая схема что-то типа того
хакпак -> оверрайд (частично) -> модуль -> биф
но при некоторых моментах оверрайд становится на первое место
NocturN
Добрый день.. в полку новичков прибыло)
Попробовал переписать заклинание и при тестах столкнулся с парой проблем решить которые не получается, уверен что где то допустил банальные ошибки.
Проблема в том что эффект Weird() срабатывет одновременно рандомное кол-во раз в одну и ту же цель.
Т.е. появляется от 1го до 5-6 духов и на цель накладывается соответствующее кол-во эффектов.
Собственно вот скрипт OnHeartbeat
Код
#include "NW_I0_SPELLS"
#include "x0_i0_spells"
#include "x2_inc_spellhook"
#include "x0_i0_position"
#include "x0_i0_match"

object oTarget;
object oCaster = GetAreaOfEffectCreator();

location RandomLocation (object oTarget, float fRadius, int iLine = TRUE)
    {
        if (!iLine)
        fRadius = IntToFloat(Random(FloatToInt(fRadius)));
        float iXO = VectorMagnitude(GetPosition(oTarget)) * cos(VectorToAngle(GetPosition(oTarget)));
        float iYO = VectorMagnitude(GetPosition(oTarget)) * sin(VectorToAngle(GetPosition(oTarget)));
        float fRndomAngle = IntToFloat(Random(360));
        location lNewLoc = Location(GetArea(oTarget),Vector(iXO + fRadius * cos(fRndomAngle),iYO + fRadius * sin(fRndomAngle)),360.0);
        return lNewLoc;
    }

void CreatePhantom()
    {
        location lRandom = RandomLocation(oTarget, 8.0, TRUE);
        object oPhantom = CreateObject(OBJECT_TYPE_CREATURE, "nw_wraith", lRandom, FALSE, "");
        ActionDoCommand(TurnToFaceObject(oTarget, oPhantom));
        SetImmortal(oPhantom, TRUE);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectEntangle(), oPhantom);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHaste(), oPhantom);
        DelayCommand(1.0, AssignCommand(oPhantom, ActionCastFakeSpellAtObject(SPELL_PHANTASMAL_KILLER, oTarget, PROJECTILE_PATH_TYPE_DEFAULT)));
        DestroyObject(oPhantom, 2.0);
    }

void ApplyEffect()
    {
        int nAbility = GetCasterAbilityModifier(oCaster);
        int nSpellFocus;
        if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster))
            {
                nSpellFocus = 6;
            }
        else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster))
            {
                nSpellFocus = 4;
            }
        else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster))
            {
                nSpellFocus = 2;
            }
        else
            {
                nSpellFocus = 0;
            }
        int nSpellDC = 19 + nAbility + nSpellFocus;
        int fSchool;
        if (GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ILLUSION, oCaster))
            {
                fSchool = 3;
            }
        else if (GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster))
            {
                fSchool = 2;
            }
        else if (GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster))
            {
                fSchool = 1;
            }
        else
            {
                fSchool = 1;
            }
        int nRounds = d2(fSchool);
        effect eFrightened = EffectFrightened();
        effect eParalyzed = EffectParalyze();
        effect ePetrified = EffectPetrify();
        effect eVisFrightened = EffectVisualEffect(218);
        effect eVisParalyzed = EffectVisualEffect(232);
        effect eVisPetrified = EffectVisualEffect(351);
        effect elFrightened = EffectLinkEffects(eVisFrightened, eFrightened);
        effect elParalyzed = EffectLinkEffects(eVisParalyzed, eParalyzed);
        effect elPetrified = EffectLinkEffects(eVisPetrified, ePetrified);
        int nRandom = Random(3);
        if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC, SAVING_THROW_TYPE_NONE, oCaster))
            {
                if(nRandom == 0)
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elFrightened, oTarget, RoundsToSeconds(nRounds));
                    }
                else if(nRandom == 1)
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elParalyzed, oTarget, RoundsToSeconds(nRounds));
                    }
                else
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, elPetrified, oTarget, RoundsToSeconds(nRounds));
                    }
            }
    }

void Weird()
    {
        CreatePhantom();
        DelayCommand(2.5, ApplyEffect());
    }

void main()
    {
        oTarget = GetFirstInPersistentObject();
        while(GetIsObjectValid(oTarget))
            {
                if(GetIsPC(oTarget))
                    {
                        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD));
                        if(!GetHasSpellEffect(SPELL_WEIRD,oTarget))
                            {
                                Weird();
                            }
                    }
                oTarget = GetNextInPersistentObject();
            }
    }
denis0k
GetFirstInPersistentObject/GetNextInPersistentObject используется для поиска существ внутри триггеров, вряд ли это то, что нужно для заклинания. Ну и чтобы оно точно искало этих существ, все равно функции нужны параметры.

Для спеллов обычно берут GetFirstObjectInShape.
NocturN
Дело в том что я делал по аналогии со стандартными заклинаниями Боиварей.. к примеру вот это заклинание http://nwn.wikia.com/wiki/Stonehold работает с такими же функциями.
Кроме того.. когда я сделал пару тестов и они меня вообще в тупик загнали.
1. Добавил для проверки еще один эффект ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); и он срабатывает такое же рандомное кол-во раз как и Weird()... но
Код
void main()
    {
        //float fDelay1 = GetRandomDelay(6.0, 12.0);
        oTarget = GetFirstInPersistentObject();
        while(GetIsObjectValid(oTarget))
            {
                if(GetIsPC(oTarget))
                    {
                        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD));
                        if(!GetHasSpellEffect(SPELL_WEIRD, oTarget))
                            {
                                //DelayCommand(fDelay1, Weird());
                                [b]ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget);
                                Weird();[/b]
                            }
                    }
                oTarget = GetNextInPersistentObject();
            }
    }

но если убрать эффект Weird(), то ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); работает как часы..
Код
void main()
    {
        //float fDelay1 = GetRandomDelay(6.0, 12.0);
        oTarget = GetFirstInPersistentObject();
        while(GetIsObjectValid(oTarget))
            {
                if(GetIsPC(oTarget))
                    {
                        SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_WEIRD));
                        if(!GetHasSpellEffect(SPELL_WEIRD, oTarget))
                            {
                                //DelayCommand(fDelay1, Weird());
                                ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget);
                                [b]//Weird();[/b]
                            }
                    }
                oTarget = GetNextInPersistentObject();
            }
    }


Вышло сузить область поиска ошибки..
Использовал все туже функцию ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget); для проверки
Сама по себе она работает правильно.
В паре с void CreatePhantom() обе работают криво, а вот в паре с void ApplyEffect() обе работают отлично.
Логично что конфликт где то в функции void CreatePhantom(), но не пойму что в ней может быть не так.

Все.. извеняюсь за стену текста, проблема вроде решена, помогла минимальная задержка 0.2 перед функцией CreatePhantom()
Код
void Weird()
    {
        DelayCommand(0.2, CreatePhantom());
        DelayCommand(2.7, ApplyEffect());
    }
denis0k
Рекомендую вставить какой-то вывод в лог в цикле и посмотреть, сколько раз этот цикл срабатывает, на ком и почему. Что-то типа вывода GetName(oTarget) через SendMessage.
Desan
Добрый вечер всем любителям нвн
Victorixxx
Всем привет! У меня вопрос к специалистам Города Мастеров, про работу туулсета с .hak архивами и про принцип ассоциации файлов в туулсете !

Объясню свою цель. У меня есть модуль Prophet - Prologue - It Cannot Be Denied" v2.0_[RUS] и связанный с ним патч СЕР 1.69 Full.

Я пользуюсь версией игры выпущенной на Android.
И хочу оптимизировать хак архивы патча СЕР и модуля Prophet так, чтобы в них были только файлы, которые использует модуль.
Остальные хочу просто напросто удалить, для экономии места.
И по возможности объединить все "просеянные" файлы из сопутствующих модулю хаков в один единственный хак!

1. Это возможно вообще возможно сделать?
2. Это возможно сделать так, чтобы не пришлось делать полную ревизию модулю в туулсете? Т.е. не пришлось заново расставлять все объекты! Так, чтобы это не нарушило структуру модуля?
3. Какие действия по пунктам можете посоветовать?
4. Как мне понять, какие объекты в модуле относятся к тому или иному хаку или к оригиналу?
5. Как мне понять, какие файлы относятся к объектам в модуле открытым в туулсете?
6. Если я объединю все файлы из хаков в один хак, сохраняя при этом структуру папок, и заменю им все хаки в свойствах модуля, это не нарушит структуру модуля? Все объекты останутся на своих местах?

Что я уже сделал. Я установил новую версию NWN Explorer EE!
Чтобы понять, какие объекты в модуле соответствуют хакам, а какие оригиналу игры, я установил полный русификатор от группы переводчиков ๑۩۩๑ Neverwinter Nights & Beamdog ๑۩۩๑ ! Это позволило увидеть, какие объекты модуля относятся к оригинальному контенту, а какие к хакам модуля! Переведены на русский только объекты, которые относятся к оригиналу, а доп. объекты из хаков модуля остались на английском. Я ведь прав?

На скриншоте видно, что в свойствах непереведённых файлов написано, что они относятся к патчу СЕР...


Aiwan
Victorixxx, привет.

1. Теоретически да.
2. Практически нет.
3. Это очень, очень сложно и долго.
4. Открываем каждую локацию и смотрим что использовано.
5. Справа все объекты будут видны.
6. Нарушится все. Модуль нужно будет перекомпилировать и если удалишь что-то лишнее, то будет ошибка и модуль может не скомпелироваться.

Обобщу. Кратко. Все хаки имеют служебные файлы 2da в которых порядок. Их размещение и порядок гарантирует порядок в модулях с полным СЕР ом.
Теперь суть вопроса. Можно полнять какую модель использует локация, но вот как понять какую модель воспроизводит скрипт, например. Как понять что из текстур удалять, если только лопатить всех нпс на локациях, смотреть во что они одеты, какие на них части тел новые, работы на полный п%:?й времени. Если заняться нечем и просто ХОЧЕТСЯ, то не вопрос. Думаю за пол годика по вечерам выйдет.
Victorixxx
Цитата(Aiwan @ Mar 18 2019, 22:51) *
Victorixxx, привет.

1. Теоретически да.
2. Практически нет.
3. Это очень, очень сложно и долго.
4. Открываем каждую локацию и смотрим что использовано.
5. Справа все объекты будут видны.
6. Нарушится все. Модуль нужно будет перекомпилировать и если удалишь что-то лишнее, то будет ошибка и модуль может не скомпелироваться.

Обобщу. Кратко. Все хаки имеют служебные файлы 2da в которых порядок. Их размещение и порядок гарантирует порядок в модулях с полным СЕР ом.
Теперь суть вопроса. Можно полнять какую модель использует локация, но вот как понять какую модель воспроизводит скрипт, например. Как понять что из текстур удалять, если только лопатить всех нпс на локациях, смотреть во что они одеты, какие на них части тел новые, работы на полный п%:?й времени. Если заняться нечем и просто ХОЧЕТСЯ, то не вопрос. Думаю за пол годика по вечерам выйдет.


Благодарю, друг! В общем, я тебя понял, что тут полный СЕР'ец biggrin.gif Неее, думаю, стоит забить на это дело, а то продолблюсь в шары кучу времени, а потом мне туулсет выдаст "ошибку компиляции" и привет rolleyes.gif

* Благодарю за создание великолепных модулей "Проклятие Левора" и "Порядок Времени" ! Я создал сборку модификаций для Android версии игры и включил их в сборник модулей! Всё работает как часы! Указал вашу команду как авторов модулей! Пользователи на 4PDA в восторге! Благодарю вас от имени всех пользователей ! good.gif

➤➤➤ ~ Сборка | NWN: EE - Mod - Black UI Edition Lite v.1.4 | Android 5.0+
Melisse
СЕР - помойка контента. Там много всего нужного и не нужного, поэтому перед созданием модуля важно выбрать то что нужно и создать свой хакпак. Это в разу проще, чем перелопачивать СЕР хаки.
Конечно, если речь идет про чистку уже созданных модулей, то это - гиблое дело.
Как-то мне пришлось перелопачивать хакпаки одного шарда, т.к. была версия 1.68, а потом стала 1.69 и все сдвинулось - добавились обьекты, заклинания и прочее. Ну где-то неделю я трудилась, но победила.
Если вы упоротый Юн Су - можно посидеть, но лучше не тратить время. Я выучила урок, он заключается в следующем: не тратить время на то что на самом деле никому не нужно, включая вас. smile.gif
Aiwan
Цитата(Victorixxx @ Mar 18 2019, 23:10) *
* Благодарю за создание великолепных модулей "Проклятие Левора" и "Порядок Времени" ! Я создал сборку модификаций для Android версии игры и включил их в сборник модулей! Всё работает как часы! Указал вашу команду как авторов модулей! Пользователи на 4PDA в восторге! Благодарю вас от имени всех пользователей !

thank_you.gif

Спасибо на добром слове и привет всем поклонникам НВН wink3.gif

Цитата(Melisse @ Mar 18 2019, 23:59) *
Я выучила урок, он заключается в следующем: не тратить время на то что на самом деле никому не нужно, включая вас.

Золотые слова. good.gif
Victorixxx
Цитата
Если вы упоротый Юн Су - можно посидеть, но лучше не тратить время. Я выучила урок, он заключается в следующем: не тратить время на то что на самом деле никому не нужно, включая вас. smile.gif


Моя шальная молодость уже прошла, когда я мог ночами просиживать за компом создавая дополнения для какой нибудь там The Movies biggrin.gif Теперь прежде чем действовать, десять раз подумаю vava.gif

Aiwan, у меня вопрос назрел, а в каком файле хранятся настройки управления клавиатурой в игре? По моим соображениям должны хранится в nwnplayer.ini, но их там нет!
Я опытным путём определил, что почему то сенсор отпечатков пальцев привязан за клавишей F11 в Android версии игры. Хочу перебиндить ручками в блокноте сенсор на паузу rolleyes.gif
Aiwan
Я вообще без понятия, что там биндить smile.gif Я только на РС НВН запускал... pardon.gif
Victorixxx
Цитата
Я вообще без понятия, что там биндить smile.gif Я только на РС НВН запускал... pardon.gif

Так я про РС версию и спрашиваю! Разницы то никакой нет! rolleyes.gif
Кто-нибудь в курсе? На РС версии где хранится информация о конфигурации управления клавиатурой? Aiwan, может всё таки знаешь?
Aiwan
Не помню. rolleyes.gif
rustamka4
Уважаемый Aiwan!
У меня 2-а вопроса:
1. По камню Призыва:
В базе вашего форума есть 2-а варианта данного скрипта
1.1. лёгкий скрипт
1.2. усложнённый скрипт
Если с п. 1.1 ясно, что куда вставлять, то с п. 1.2 не совсем. Не могли бы Вы подробнее объяснить куда вставлять скрипт в п. 1.2

2. скрипты Камня Призыва и системы Крафта от PaiNt'a требуют установки своих скриптов на слот OnItemActivate в свойствах всего молуля (если я правильно разобрался).
Возможно, это как-то совместить? Если можно, подробнее. Да и вообще, если можно дайте общее описание для решения этого вопроса для других таких случаев.
P.S. Прошу отнестись с пониманием. За 16 лет так и не смог сам выучить скриптоведение. Гуманитарий жесткий bad.gif
С БОЛЬШИМ УВАЖЕНИЕМ, Рустам!
Валиум
Вопрос у меня назрел болезненный. ЕЕ версия. Наверняка, многие знакомы с забугорной PRC сборкой. И если с перелопачиванием 2да, тлк и прочей он дает работать нормально, то свои скрипты изменять он не позволяет от слова совсем. Сценарии переписывал и заменял поверх тех, что были, но один черт, он берет свои первоначальные алгоритмы, хотя казалось бы скрипты переписаны и поправлены так как мне нужно... В чем может быть проблема? И откуда он их вообще вызывает, если не из хаков в модуле?
Melisse
алгоритм перезаписи ресурсов примерно такой в ЕЕ - то что первое будет определяющим:

1. хакпаки модуля
2. модуль
3. оверрайд в папке игрока - что "моих документах"
4. базовый оверрайд в корневой папке игры - куда бимдоги кидают изменения

Поэтому прошерстите хакпаки и удалите *.ncs и *.nss, которые вы переписали в модуле
Валиум
Ну, я это так или иначе понимал, оказалось все дело в том, что скрипты не компилируются внутри авроры. Есть какие-нибудь инструкции по внешним компиляторам? А то найденный на ваулте NWNSC - потемки.
denis0k
Если в скриптах ошибки, их ничто не скомпилирует.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.