Во время диалога нужно провести проверку наличия определенных компаньонов для дальнейших манипуляций с ними. Можно ли где-то задать переменную типа ref, которая будет хранить ссылку на текущего компаньона и в дальнейшем пользоваться этой ссылкой, или же придется нудно перебирать каждого возможного спутника?
Поскольку сегодня шанс на то, что кто-то будет играть с единственным модом - твоим - исчезающе мал, поскольку модов, которые добавляют в игру спутников ГГ, множество, и поскольку даже стандартная игра позволяет одновременно иметь больше одного спутника...
Я бы предложил в начале диалога производить обыск территории и всех присутствующих проверять на предмет того, не компаньоны ли они часом. Это немного слишком громоздко, чтобы втыкать такое сканирование прямо в диалоги - поэтому я бы посоветовал оформить это как подпрграмму (это не очень очевидно, но роль подпрограмм в скриптах фолаутов выполняют скрипты стадий квеста, а вызов такой подпрограммы выполняется функцией SetStage).
В случае поддержки сторонних компаньонов для компенсации автохила после боя нужно будет в конце боя запоминать показатели хп и конечностей спутников путем сканирования неписей, и после боя восстанавливать нужные параметры.
Я бы предложил по результатам периодического сканирования на компаньонов вешать эффект анти-автохила, который и будет компенсировать читерство.. Да, со стандартными компаньонами можно оверрайдить им врождённый скрипт и выкусывать из него автохильный блок OnCombatEND - но это не очень красиво, а если вешать на них компенсатор автохила, то с тем же успехом можно на всех вешать.
наткнувшись в игре на труп и подкинув нямку ему в инвентарь, мы имеем шанс при следующем посещении "покойного" увидеть его живым?
Оживают на резете зоны только покойники с флажком respawn. Независимо от того, начинали они игру живыми или мёртвыми. Оживляет их не содержимое карманов, оживляет их резет. Не знаю, имеет ли смысл кормить тех, кто сразу был дохлый - то есть они оживают с нулём жизни, но это как бы и есть максимальное количество их жизни, так что не в жмурика корм
Я совершенно не отрицаю существование чудес и полтергейста в игре - свидетелей слишком много... Мистика - бывает.
Но если бы такое оживание было обычной практикой... Вот вошёл в игру моб... Умылся, позавтракал... Потом спохватывается - чёрт, я же мёртвый! И ложится точно в ту позу, которая была ему назначена в GECK.
Конечно. Что-то съесть он может только после того, как у него активизируется пакет, разрешающий кушать. Совершенно очевидно, что подавляющее большинство мёртвых мобов ничего не едят и не шевелятся. Но, разумеется, у меня есть теория, объясняющая произошедшее! Это был непредсказуемый мистический глюк. Не надо вставать в оборонительную стойку и ощетиниваться только потому, что игра ведёт себя странно. Это не норма, но это и не редкость.
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №486
| Тема: Помощь по моддингу
написано: 15 февраля 2013, 07:48
| Отредактировано: Ipatow - 15 февраля 2013, 07:49
Я так понимаю, вначале движок находит актера с нулевым здоровьем только после этого зачисляет его в списки официально мертвых. Так вот, в этот промежуток НПС успевает что-нибудь сожрать. И это не факт, это моя гипотеза.
Это не гипотеза, это "потому что гладиолус". Инцидент был настолько неинтересен, что даже мысли не возникло проверить, что происходит?..
как сделать чтобы твой компаньон садился когда ты садишься?
Куда садился? На электрический стул? Поставь ему первым пакетом в списке "использовать электрический стул" с условием "если ГГ сидящий". Если куда попало - использовать любой предмет типа furniture (правда, это может оказаться кровать.. тогда, увы, не сядет, а ляжет). Вместо пакета use можно использовать пакет find, чтобы он сначала нашёл куда бы прилечь, если близко нету стула. Правда, если ГГ занял единственную табуретку в окрестностях, компаньон так и будет носиться вокруг в поисках мебели, пока ГГ сидит...
Я имею ввиду клавищу CTRL. Гг садится на землю (приседает) ну как еще объяснить то???
Это называется "режим скрытности". NPC, выполняющий пакет Follow, автоматически копирует режим скрытности ведущего. Если ты хочешь, чтобы он повторял состояние sneak за ГГ в других типах пакетов (раз он у тебя не копирует прятки, значит, пакет не тот - Guard например), добавь приоритетную копию пакета с флагом Always Sneak и условием Player.IsSneaking == 1
К слову, садиться можно не только на электрический стул, но и на землю... Сделать пакет с прицелом на маркер "пол для сидения", перебрасывать этот маркер под ноги NPC и включать пакет... Должно получиться смешно - ГГ прячется, спутники рассаживаются вокруг него на пол
Насколько я знаю, актуальный движок игры при загрузке модуля filename.esp подгружает все архивы filename*.bsa - причём звёздочка может быть и отсутствием символов - и точно так же поступает при загрузке модуля filename.esm. Если я правильно помню, в первых версиях fallout3.exe (во времена которых была написана эта статья GECK-вики) использовался какой-то другой алгоритм.
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №491
| Тема: ВОПРОСЫ по моддингу
написано: 21 февраля 2013, 15:32
| Отредактировано: Ipatow - 21 февраля 2013, 15:33
Насколько я знаю, порядок поиска файлов такой - сначала файл ищется в SArchiveList (прописано в INI-файле) в том порядке, в каком архивы там перечислены (при этом знаменитый ArchiveInvalidationInvalidated!.bsa подсовывает вместо себя все свободно лежащие файлы), затем в подключенных модулями архивах (насколько я знаю, в порядке загрузки модулей - но я не знаю, как сортируются множественные архивы одного модуля, не то чтобы был какой-то смысл дублировать их содержимое). Как только файл найден, поиск прекращается. Чтобы заменить стандартный файл, ты должен подсунуть замену так, чтобы она нашлась раньше стандартных файлов - то есть либо уложить её в архив и прописать его в начало SArchiveList, либо воспользоваться любезностью ArchiveInvalidationInvalidated! и положить файл в папку безо всяких архивов.
как показал дотошный дебаг, сам скан работает без пропуска неписей, а вот функция GetPlayerTeammate лажает
Ссылки, которые выдаёт сканирование, действтительно не сразу полностью "работоспособны". То есть функции, извлекающие какую-то информацию, некоторое время извлекают сплошные нули. Совершенно типичная ситуация - сканируем NPC, GetNextRef, по найденному "GetIsSex мужик?" - не, не мужик - "GetIsSex тётка?" - не. не тётка - "А КТОООО?"
При этом ставить в сканер специальную тормозилку неконструктивно, сканер обязан отработать без прерываний, и такой тормоз будет серпом по молоту всем остальным скриптам. Потому желательно планировать алгоритм так, чтобы тебе не нужно было по ходу сканирования опрашивать найденные ссылки...
Есть такая функция IsPlayerMovingIntoNewSpace. Она может быть использована как условие в пакете Follow, поскольку такой пакет запускает переоценку (evaluation) пакетов при попадании в menumode 1007 (loading screen). Если у кого-то есть опыт применения этой функции в любых других случаях - как вы её использовали?
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №494
| Тема: Помощь по моддингу
написано: 24 февраля 2013, 08:25
| Отредактировано: Ipatow - 24 февраля 2013, 08:25
как мне показалось, от нее никакого толку. Сторожевая собака, которая должна была преследовать ГГ только в охраняемой зоне, преследовала его и на краю галактики. Мне кажется, это было связано с очередностью загрузки игрока и его свиты в ячейку.
Мне кажется, я понимаю, почему это могло не работать у собаки. Функция IsPlayerMovingIntoNewSpace равна единичке только пока на экране картинка загрузки. То есть пакет Follow с условием IsPlayerMovingIntoNewSpace == 0 действительно отключится в тот момент, когда игра решает, телепортировать ли сопровождающего вместе с сопровождаемым - и он не будет телепортирован, если пакет, активировавшийся вместо этого Follow-пакета, не является тоже пакетом Follow. Но как только телепортация завершилась, изначальный Follow-пакет снова активируется (функция опять ноль), исходная ячейка всё ещё в Cell Buffer (то есть No Low-Level Processing для её обитателей ещё не включился) - собака выполняет этот пакет и бежит в ту же дверь следом за ГГ. Если Cell Buffer сброшен - например, если включено автосохранение при телепортации и мы восстанавливаемся из этого сейва - тогда собака не догонит. Если ГГ улетал фаст-травелом - собака всё равно погонится за ним, просто пешком, а не телепортом - и найдёт его хоть на краю галактики.
Мой интерес был в том, что у меня сопровождение сделано тремя пакетами - Guard в качестве боевого поводка, чтоб сопровождающие не убегали в поисках врагов, Sandbox, чтоб они не стояли пнями, когда ГГ остановился, и, собственно, Follow. И вот этот бутерброд плохо себя ведёт при ходьбе сквозь телепортные двери. Свита постоянно отстаёт. Они, конечно, потом догоняют - но этого "потом" бывает слишком долго ждать, особенно если за телепортом война. Пакет Follow переоценивается в телепорте - но как раз с ним всё хорошо, если Follow активен, охрана телепортируется за охраняемым. А вот Sandbox-у плевать на телепорты, переоценка пакетов просто не производится...
Что касается пакета сандбокс (с ГГ в качестве центра песочницы, как я понимаю). Если не переключить этот пакет на follow ДО телепортации, свита не сможет загрузиться на новое место раньше игрока. Даже если переназначить ей пакет в момент телепортации, она все равно прибудет за телепорт с опозданием. А переназначить пакет непосредственно перед телепортацией невозможно - мобы не знают намерений ГГ. Остается только одно - moveto, если компаньон сандбоксится в разных с ГГ ячейках, мне кажется.
Да, грибком в центре песочницы работает ГГ... Вообще-то, глядя на отладочную печать, последовательностьь событий там - активация двери, потом переоценка пакета у охранников, у которых активен пакет Follow, потом смена ячейки, в которой находится ГГ. Мне кажется, что решение о телепортации должен всё-таки принимать пакет, включающийся после переоценки... Попробую для начала исполнить в менюмоде смены локации принудительное EvaluatePackage... Хотя оно неизящно - потому что надо как-то опознавать, кого именно дёргать, чтобы не отставал. Дёргать всю роту, когда ГГ взял с собой в разведку всего двоих-троих, как-то слишком по-армейски Делать GetInSameCell условием песочницы как-то неправильно, на пустоши ячейки квадратные, и когда ГГ стоит на границе квадратов, результат будет менее гладким, чем "GetDistance < радиуса", который и так там есть... Почему игра не все пакеты переоценивает в телепорте? Если она всё равно перебирает NPC, чтобы определить, у кого из них пакет Follow - могла бы и всем переоценку включать?..
Если я повешу greeting "привет" с приоритетом... ну, 10... на всех персонажей
То персонажи, имеющие с приоритетом хотя бы 11 гритинг системы "ни звука" с флажком "гудбай", исполнят этот гудбай, не интересуясь менее приоритетной разговорчивостью...
равно в игре сохраняет нейтралитет, хотя я его ставил за мою фракцию. И при появлении врагов, он также бездействует.
Хочу уточнить существенный момент. "Ставить за фракцию" - это как? Просто указал, чт он является членом фракции? Само по себе это вообще ничего не значит. Фракция может использоваться для чего угодно, и она не обязательно нагружена какими-то отношениями. В частности, даже внутри фракции. Если в свойствах фракции не указано, что её члены друг другу союзники или приятели - как пример фракция курильщиков - то члены фракции даже не подумают друг другу помогать.
Валидация, это народное название процесса регистрации путей к текстурам в ini файле Fallout.
Я не хочу показаться занудой... Так или иначе, возможно, кому-то будет полезно знать, как оно устроено на самом деле.
В оригинальной игре есть механизм "инвалидации архивов" - ArchiveInvalidation. В INI-файле в секции [Archive] за это отвечают два параметра: bInvalidateOlderFiles и SInvalidationFile. Тот файл, имя которого указано во втором параметре, содержит список файлов, для которых отключается просмотр архивов (если файлы более новые, чем архивы - за это отвечает первый параметр). Первые моды-риплейсеры использовали эту технологию и вместе с файлами (альтернативными текстурами, моделями и т.п.) содержали и список файлов, которые надо добавить в список исключений.
Этот стандартный механизм не очень удобен, поскольку при изменении списка модов всё время приходится не только добавлять-убирать файлы, но и редактировать список исключений. По этой причине была изобретена технология "инвалидация инвалидации" - список исключений ("инвалидация") отменяется вообще, вместо этого в списке архивов в INI-файле - SArchiveList - в начало этого списка, поскольку поиск файлов игра начинает с этого списка по порядку - добавлен псевдо-BSA-архив ArchiveInvalidationInvalidated!.bsa, действительным содержимым которого являются все лежащие россыпью в подпапках Data файлы. Можно просто где-то взять этот псевдо-архив (он крошечный), положить его руками в Data и прописать его в SArchiveList, можно воспользоваться его установщиком или FOMM/NVMM/NMM и прочими менеджерами, которые сделают это по одному нажатию кнопки.
Одна тонкость, связанная с механизмом "инвалидации инвалидации", которая привела к появлению мифов и шаманских заклинаний вида "чуть что, нажмите кнопку ДВА раза! выключите и включите!". Дело в том, что механизм ограничения по дате заставляет игру игнорировать рассыпные файлы в Data, если они более новые, чем псевдо-архив ArchiveInvalidationInvalidated!.bsa. Поскольку дата создания этого архива - дата нажания кнопки в FOMM (или кто там создаёт этот псевдо-архив), то для того, чтобы игра увидела более новые, чем этот псевдо-архив, файлы, нужно обновить его дату на более позднюю - и включение-выключение это делает (поскольку удаляет псевдо-архив и заново его создаёт). Я советую один раз- поставить псевдоархиву дату куда-нибудь на 2030 год - чтобы ближайшие лет семнадцать в шаманстве не нуждаться...
Резюмируя... "Валидация" - так не понимающие всего этого называют либо шаманское дважды-нажатие кнопки, пересоздающее псевдо-архив, либо первое создание этого псевдо-архива, если до того "инвалидация инвалидации" отсутствовала (в обоих случаях смысл один - "чтобы рассыпуха подключилась"). Звучит короче и загадочнее, чем "исключение исключений".
Я правильно понимаю, что валидация нужна только для тех текстур, которые лежат в Data по игровым путям (как в bsa) и имеют такое же имя, как игровая текстура? Так делается, когда меняется текстура на всех объектах с такой текстурой в игре. Так! Если не внести эту текстуру список ini файла или псевдо архива - будут баги с отображением текстуры. Игра будет одновременно показывать обе текстуры?
В первую очередь, речь не только о текстурах - любые файлы, которые может захотеть искать игра (текстуры, модели, звуки, музыку, анимацию, XML интерфейса - любые), она ищет одним и тем же способом. Баги с отображением текстуры возникают, когда игра не находит файл текстуры. Точнее, сиреневая заливка не баг, это штатное поведение при отсутствии текстуры. "Переливчатые" текстуры, раскрашивающие модель вместо текстуры случайным мусором (обычно клочьями других текстур) - это действительно баг: игра файл не нашла, но думает, что нашла (скорее всего, файл найден, но игре не понравилась его дата, и игра не стала его загружать).
Текстуры игра ищет без вариантов (без маски - во многих случаях, когда сказано взять file.ext, игра ищет не file.ext, а file*.ext - иногда до первого найденного файла, иногда находит всё, что подходит под маску, и случайным образом выбирает из найденного один файл), поэтому первый найденный файл с таким именем и используется. В стандартном порядке поиска, если файл не указан в списке исключения из архивов, он сначала ищется в архивах, и стандартный файл будет взят из стандартного архива. В случая с псевдо-архивом, который засовывается в самое начало поиска, сначала будет искаться свободно лежащий файл, и только если его нет, будет браться стандартный файл из стандартного архива.
Попытался тут соединить есм-файлы с соответствующими файлами переводов в эгг-переводчике, в итоге пропала вся местность. Значит лучше через FNVedit? Или есть другой способ соединения?
Достойных моделей и в самом деле недостаточно... Но поскольку корень зла не в создании модели тела, а в одевании на это тело всей существующей брони-одежды... Это ещё не касаясь несовместимых между собой скелетов...
Купили мокаповскую студию за бешеные деньги и в тоже время экономят несколько тысяч на моделях?
Не буду говорить, что действительно понимаю ход их мыслей... Но, возможно, они думали о моддерах и модах? Самодельное (пусть кривое и косое) можно отпустить на растерзание, и никто не указ. А капризный профессионал что скажет, когда заказчик захочет разрешить кому попало над его шедевром издеваться? Возможно, добавит к $5000 пару нулей для компенсации морального ущерба заранее травмированной гениальной творческой душе...
Нету там никаких ограничений - покупай и делай все, что хочешь. Вот как выглядит лицензия: [...] 2. Rights Granted. When a priced Product is purchased and downloaded, a rights is granted by License to the original Buyer only: [...]
Похоже, я был прав. Выделенное синим слово по-русски означает "моддеры идут лесом"...
Выделенное синим слово по-русски означает "моддеры идут лесом"...
ну мы же не для себя покупаем ... речь идет о студиях которые занимаются созданием игр. Там же написано, что можно спокойно использовать в играх и т.д.Ну а я предположил, что студия, создававшая игру, думала о моддерах. Да, Беседка могла бы купить такую модель - но это означало бы запрет моддерам эту модель модифицировать: поскольку моддеры лицензию не покупали, права есть только у студии. Следовательно, никакой моддер не сможет сделать, например, одёжку на эту фигуру...
для создания одежки - модель тела трогать не надо. да и потом, если бы они такую модель использовали в игре... никому бы и в голову не пришла мысль ее переделывать Поскольку уже лучше смогут сделать только еще боле крутые профессионалы ... но точно не любители которыми мы являемся.
Гмм... Строго говоря, одежда действительно в принципе могла бы быть сделана как навесок на голое тело, а не как сейчас - сейчас она сшита из кусков ткани и кусков голой модели тела... Я не могу об этом квалифицированно судить, я не умею делать модели и я жутко боюсь 3D-редакторов, но я помню из отзывов что-то про ограничения движка Gamebryo, вроде того, что там нельзя задавать restraints в узле более чем с четырьмя костями одновременно (не уверен даже, что правильно цитирую). Возможно, чем-то таким обосновывается сбор моделей одежды из кусков металла, пластика и человека. Или, может быть, так делается из соображений оптимизации и экономии каких-то ресурсов движка... Так или иначе, в условиях такой лицензии, какая процитирована, ни одна существующя модель одежды/брони для фолаутов не могла бы быть создана моддерами...
не важно в какой игре... во всех один и тот же принцип. Я это и объяснила выше.
Я прошу прощения, но никакие объяснения не заставят куски модели тела, намертво встроенные в модели одежды/брони таких игр, как фолауты, обливион (думаю, и скайрим - хотя установленная у меня версия NifScope его модели и не читает, потому навскидку это я не проверил) - исчезнуть. Реальность не опровергнуть объяснениями - а эта реальность не позволяет содавать модели одежды в привычном для этих игр стиле, если автор модели тела запрещает моддерам использовать его модель.
По сути дела, разработчики в таком случае - тело могут вшить в сам движок. И тогда уж точно модмейкеры не смогут ничего сделать.
А вот это вопрос принципиальный. Как я понимаю, затея Беседки заключалась в том, чтобы моддеры могли сделать много, а не в том, чтобы связать их смирительной рубашкой. Сделать игру, активно борющуюся с попытками моддинга, не так и сложно, соглашусь. Но не все ставят такую цель.
слот Upper Body - тело. ВСЯ оригинальная одежда занимает этот слот, подменяя модель тела моделью тела в броне.
Строго говоря, с точки зрения экипировки, человек состоит из 4 частей.. Голова, торс и левая-правая кисти рук. Торс (сохранивший название с обливиона) в фолаутах включает в себя ноги вместе со ступнями. Про руки часто забывают, поскольку в оригинальной игре нет отдельного видимого игроку вида экпипировки - перчатка...
Исходя из этого, возможно создать броню, которая формально не будет занимать ни один из слотов, в которых есть голое тело - так что весь человек будет ровно в том виде, как его создал автор модели тела - пытаясь так расположить в пространстве материал брони, чтобы он не пересекался ни с одной из подключенных в игре моделей тел. Гмм... По причине последнего, наверное, придётся ограничиться сферической бронёй...
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №509
| Тема: Бункер модмейкеров
написано: 19 марта 2013, 18:37
| Отредактировано: Ipatow - 19 марта 2013, 18:40
о чем и пыталась сказать... только так и не поняла, что такой сферическая броня.
Сфера это по-русски шар. Шарообразная броня. Что бы каким бы ни было тело человека - высоким или низким, тощим или грушевидным - тело оказалось бы внутри брони, а не торчало сквозь тряпки/кольчугу.
Поскольку конформуляция тут существует только для головы, одежда должна либо включать в себя соответствующее этой одежде тело, либо быть такой безразмерно огромной (и лучше круглой по форме), чтобы в неё поместился представитель любой из рас, если одежда накладывается сверху на авторское тело. Со всеми его рогами, крыльями и хвостами.
Я еще не видела чтоб было несколько тел от беседки. Всегда одно для женщин, второе для мужчин. Вот и все...
Если у каджиток и имперских тёток одно и то же тело с хвостом, то я чего-то не понимаю в элдер скроллз... Так или иначе, конструкция рас предусматривает разные модели тела для разных рас. В фолаутах смысл различных расовых моделей менее очевиден, но если вспомнить, что возраст там считается расой - то одна и та же модель тела для скрюченной старушки и комсомолки не выглядит особенно здраво.
Есть факт - возможность различных рас иметь различные модели тела фундаментальна. И есть другой факт - модель одежды по мнению разработчиков должна иметь встроенную модель тела, и к чертям различные расы с различными моделями тел.