Модератор форума: КсюXa, ApeX  
Форум » Fallout: New Vegas » Мастерская » ВОПРОСЫ по моддингу (Спрашиваем и отвечаем на тему как сделать то или это...)

ВОПРОСЫ по моддингу
Defox  Offline  Сообщение №1 написано: 3 ноября 2010, 11:46 | Отредактировано: ApeX - 3 ноября 2018, 10:41


Project Fallout: Wild Wasteland


463
Прежде чем задавать вопрос - посмотрите в
>> КАРТОТЕКЕ <<

Возможно, там уже есть готовый ответ.

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

FuriousFighter  Offline  Сообщение №1321 написано: 5 июля 2012, 01:48





800
Я перенес в игру два револьвера. Все нормально, кроме одного. При перезарядке я вижу, что ГГ сует в барабан не патроны, а воздух. Как исправить эту проблему??

border="0" alt=""/
Римайер  Offline  Сообщение №1322 написано: 5 июля 2012, 06:36


хоМяк


957
FuriousFighter,
А вот такая:

запчасть есть на револьвере? На скрине я приподнял её, для наглядности, а по уму её надо в барабан пристраивать.

Крофт  Offline  Сообщение №1323 написано: 6 июля 2012, 03:04



Ipatow, KAIN48, Спасибо за советы ok Попробую ещё повозится.

Маркус  Offline  Сообщение №1324 написано: 6 июля 2012, 07:13



Меня такой вопросик интересует - есть мод добавляющий новых неписей в новом шмоне. Я хочу "переодеть" этих неписей в броньку из другого мода. Как в ГЕККе это провернуть?

Galko  Offline  Сообщение №1325 написано: 6 июля 2012, 14:05


GALAктическая мартышка


Маркус, Есть варианты. Если оба мода выполнены в виде файлов-плагинов esp (то есть имеют в качестве мастер-файла только основной файл falloutnv.esm), то тогда грузишь в ГЕКК оба мода ( с неписями и с броней). Мод с неписями назначаешь активным. Выбираешь нужную броню из другого мода, открываешь, меняешь ей айди. Закрываешь. При запросе о создании нового объекта отвечаешь - Да. И так с каждой броней. Потом сохраняешь плагин (раз у тебя активным был плагин с неписями, то изменения запишутся в него). Закрываешь ГЕКК, запускаешь снова. Грузишь только плагин с неписями, снова отметив его активным. После загрузки увидишь, что в этом плагине появились новые броньки из предыдущего мода. Раскидываешь их в инвентарь нужным неписям, удалив у них старую броню. Естественно, если впоследствие не планируется использовать отдельно мод с броней - то есп-файл этого мода можно удалить, НО (!) модели и текстуры брони нужно оставить в папке Дата.
Если же мод-донор с броней имеет кроме falloutnv.esm свой мастер-файл esm (или же сам является мастер-файлом esm) то там примерно также нужно все делать. Только потом возникает необходимость отвязки лишних мастеров от плагина. Многие начинают путаться :)

Ваше счастье, что я не ваше счастье
RustWays  Offline  Сообщение №1326 написано: 6 июля 2012, 21:45



Эх, боюсь вряд ли помогут...

Токое дело: возможно ли менять координаты локации или смещать весь мир относительно центра отчета.
Дело в том, что я создал локу, но не посмотрел, какие у нее кординаты, и теперь не знаю что делать, так как по сути она(лока) должна быть в другом месте.

Ipatow  Offline  Сообщение №1327 написано: 6 июля 2012, 22:04



Цитата The_Riff

возможно ли менять координаты локации или смещать весь мир относительно центра отчета.
Дело в том, что я создал локу, но не посмотрел, какие у нее кординаты, и теперь не знаю что делать, так как по сути она(лока) должна быть в другом месте.

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

RustWays  Offline  Сообщение №1328 написано: 6 июля 2012, 22:16



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

А что касается объектов, то я поступлю не совсем как адекватный. То есть всем(большинству) я буду пересчитывать и переписывать координату, пока не перетащу все)) В принципе их можно и просто таскать по частям и стыкавать там, где это надо.

Ipatow  Offline  Сообщение №1329 написано: 6 июля 2012, 22:56



Цитата The_Riff

пересчитывать и переписывать координату

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

Spalny_Vagon  Offline  Сообщение №1330 написано: 7 июля 2012, 08:32


Мастер


Цитата Ipatow

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


Не знаю, как у вас, в Вегасе, а в Фаллауте достаточно изменить World Map Offset Data, и все хозяйство из вашего мира переезжает вместе с ландшафтами, персистентами и навмешем на новое место того мира, частью которого он является. Т.е. весь мир как бы перемещается целиком. На самом деле, разумеется, он никуда не двигается, двигается (двигаются) только map-маркер (маркеры) на общей карте. Числа там иногда приходится ставить большие, например, чтобы сдвинуть Мегатонну к краю Пустошей, ей надо изменить координату тысяч на пятьдесят, если мне память не изменяет. Главная проблема при перетаскивании миров с места на место заключается в том, что окружающий пейзаж "за стеной" (если он виден) придется каждый раз переделывать.

======================
Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294
Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
DeaDevil  Offline  Сообщение №1331 написано: 8 июля 2012, 01:48



10
Почему я не вижу вылет гильз у дробовика, хотя в NifScopе, строка ShellCasingNode есть!

Galko  Offline  Сообщение №1332 написано: 8 июля 2012, 17:59


GALAктическая мартышка


Цитата DeaDevil

Почему я не вижу вылет гильз у дробовика, хотя в NifScopе, строка ShellCasingNode есть!


А в редакторе ГЕКК в настройках этого дробовика выбран тип гильз (вкладка Art and Sound, поле ShellCasing)?

Ваше счастье, что я не ваше счастье
Spalny_Vagon  Offline  Сообщение №1333 написано: 8 июля 2012, 18:01


Мастер


rizys-mod, Galko, спасибо, нашел.

======================
Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294
Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Маркус  Offline  Сообщение №1334 написано: 10 июля 2012, 14:34



Как (если конечно не слишком зубодробительно) заставить неписей из определенной фракции носить модовую броньку взамен стандартной. Для примера - хочу "переодеть" Подрывников.

Ipatow  Offline  Сообщение №1335 написано: 10 июля 2012, 15:56



Цитата Маркус

Как (если конечно не слишком зубодробительно) заставить неписей из определенной фракции носить модовую броньку взамен стандартной. Для примера - хочу "переодеть" Подрывников.

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

Как это сделано авторами игры? Например, подрывники наряжены в CondPowderGangerArmorAll [LVLI:00101C91] - если хочешь переодеть их всех разом, просто измени содержимое этого списка. Для всех групп с каким-то дресс-кодом (это не только одежда, но оружие и всякие карманные мелочи) авторы уже предусмотрели списки, изменение которых изменяет экипировку и инвентарь всей группы - довольно резонно этим воспользоваться.

Маркус  Offline  Сообщение №1336 написано: 10 июля 2012, 16:12



Цитата Ipatow

если хочешь переодеть их всех разом, просто измени содержимое этого списка.


И где его искать в ГЕККе?

Galko  Offline  Сообщение №1337 написано: 10 июля 2012, 16:23 | Отредактировано: Galko - 10 июля 2012, 16:46


GALAктическая мартышка


Цитата Маркус

И где его искать в ГЕККе?


Открыть ГЕКК, перейти в окно объектов, выбрать позицию ALL (показать все) и в вверху, в поле фильтра вбить название списка, которое тебе дал Ипатов, т.е. - CondPowderGangerArmorAll

Добавлено (10.07.2012, 20:23)
---------------------------------------------
Если нужен список с другой одеждой - открывай непися, перейди в инвентарь, посмотри какую одежду он носит, проверь - это конкретная броня или список брони (LVLI) . Если список - запомни название (Editor ID). Перейди в раздел Leveled Items, найди по Editor ID нужный список, удали из него старую броню и перетяни туда новую, нужную тебе из раздела Armor

Ваше счастье, что я не ваше счастье
emo877  Offline  Сообщение №1338 написано: 13 июля 2012, 08:09



49
Насколько глупо смотрится затея навесить такой gamemode скрипт на достаточно распространенный (у торговцев) ingestible?

Begin GameMode
Set rSlf to GetContainer
if rSlf != player && rSlf.IsSpellTarget zDrugN == 0 ; спелл-эфф. одноименен ingestible
rSlf.EquipItem zDrugN
endif
End

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

Ipatow  Offline  Сообщение №1339 написано: 13 июля 2012, 08:34



Цитата emo877

затея навесить такой gamemode скрипт на достаточно распространенный (у торговцев) ingestible

Насколько я знаю, инвентарные объекты, находящиеся в контейнере (в т.ч. инвентаре моба), не имеют RefID (функции NVSE, сканирующие инвентарь, присваивают объектам временные ID, действительные в пределах фрейма), а скрипты этих объектов не "крутятся" (никакой гейммоды-менюмоды, только триггерящиеся OnAdd/OnDrop/OnEquip и т.п.).

Возможно, я ошибаюсь, но сказанное легко проверяется...

SoloDrive  Offline  Сообщение №1340 написано: 13 июля 2012, 08:50



36
SeLDeN, насколько я помню, функция BSA Create была в FOMM экспериментальной и работала через пень колоду. Весной тоже бился над этой проблемой, перерыл тучу форумов, включая иностранные, но ответа так и не нашел. Не видит игра собственноручно сделанные BSA, хоть тресни :)

Если все, кто меня критикуют - завистники,
следовательно, те, кто хвалят - льстецы?
© Диспепсий Пустула Вербалийский
JupiterJour  Offline  Сообщение №1341 написано: 13 июля 2012, 09:18 | Отредактировано: Joopeeter - 13 июля 2012, 09:27


_


emo877, Ipatow, гейммод очень даже крутится в инвентаре и в контейнере, но тут, думаю, можно и без него.
Насколько я понял, скрипт принуждает неписей употребить и по мере протрезвления усугублять. Употребление можно перенести в блок OnAdd прям как есть, а усугубление - в ScriptEffectFinish с проверкой осталось там ещё или вчера всё допили.

Кстати, а что, интересно, будет, если принудить к употреблению не актёра, а холодильник, например? Возможно, стоит ещё проверить насчёт rSlf.IsActor.

Ipatow  Offline  Сообщение №1342 написано: 13 июля 2012, 09:38



Цитата emo877

списочные товары у них скорее всего не в инвентори, а в где-то расположеных контейнерах

Выражаясь точнее, продавец продаёт то, что есть у него в инвентаре, плюс содержимое Merchant Container этого экземпляра продавца, плюс содержимое всех близко расположенных контейнеров, принадлежащих этому продавцу. При этом содержимым одного и того же контейнера может одновременно торговать несколько продавцов - если их обязать пожирать товары, может быть не очень просто найти всё подлежащее съедению и всех едоков.

В некоторых случаях GetContainer врёт - например, после RemoveMe предмет уже лежит в новом контейнере, но ещё долгое время думает, что он всё ещё в старом.

emo877  Offline  Сообщение №1343 написано: 13 июля 2012, 10:38



49
Спасибо.
То есть мне неспроста страшно стало (помянутые лабораторки проделать конечно стоит для прояснения). История вопроса соб-но такова - чтобы заставить 3х возможных ванильных ж-напарниц жрать выданные им пц таблетки "против всяких разных случаев" я вставил аналогичные по назначению куски в крутящиеся(с темпом ~5sc) на них квестскрипты. А более глобальный чел видимо захотел дать эту возможность всем нпц. А поскольку чел явно неглупый (офигенски большие работающие моды на LL делает) **, естественно я подумал что это я чегото не понимаю. После довыяснения (лабы) может самого спрошу, на что он расчитывает. (не раньше понедельника, оффлайн)

зы. ** и не из таких, которые на жалобы "лагает", отвечают "выкинь свой калькулятор" ;)

ElGazo  Offline  Сообщение №1344 написано: 16 июля 2012, 06:17



70
Всех приветствую. В картотеке ответа не нашёл, так что прошу помощи. По какой причине GECK не видит GO-варианты (т.е. World Model) некоторых nif'ов (очки, маски и.т.д.) из Foll3? Точнее: в Model Data в столбце 3D Name выдаёт ошибку - Marker_error:0. В nif'scope всё ок. Как бороться? Заранее благодарен.

Galko  Offline  Сообщение №1345 написано: 16 июля 2012, 17:37


GALAктическая мартышка


Цитата ElGazo

в Model Data в столбце 3D Name выдаёт ошибку - Marker_error:0. В nif'scope всё ок. Как бороться? Заранее благодарен.


Сама в шоке... При портации из Фол3 в вегас некоторых моделей, при попытке просмотра их в ГЕКК выдается сообщение об ошибке маркера. Такое бывает, когда модель добавляется в папку Дата при уже запущенном редакторе ГЕКК. Перезапуск ГЕККа убирает эту проблему и в игре модель показывается нормально. Если при перезапуске ГЕКК ошибка не исчезает - то проблема остается и в игре ( вместо модели в мире показывается ромб-восклицалка) С чем связано - так и непоняла ^_^

Ваше счастье, что я не ваше счастье
Ipatow  Offline  Сообщение №1346 написано: 17 июля 2012, 03:52



Цитата Galko

При портации из Фол3 в вегас некоторых моделей, при попытке просмотра их в ГЕКК выдается сообщение об ошибке маркера.

Назовите точно несколько файлов, вызывающих ошибку? Модели Fallout 3 сделаны местами неаккуратно (например, Armor\HeadGear\WastelandChild03\hatmale.nif), совсем не везде единообразно - и предрелизная отладка у них состояла не столько в исправлении ошибок, сколько в забивании шурупов молотком, лишь бы как-то держалось (например, когти смерти с body parts от супермутанта, поскольку BPD когтей не удалась, и BPD от супермутанта без ragdoll, поскольку куклу не получилось вполне подружить с хавоком)...

GECK в EditorWarnings.txt более подробно не пишет про эти ошибки?

Heartless  Offline  Сообщение №1347 написано: 17 июля 2012, 15:19 | Отредактировано: BushWacker - 17 июля 2012, 15:32


El Pythonisto


Всем доброго времени суток! Имею ряд вопросов :)

Номер раз.
Скрипт, насколько я понял, отвечающий за/помогающий при включении/выключении так. фонаря на оружии:
Code
scn xMoTaclightQuestScript
;MOVE LIGHTS IN FRONT OF PLAYER WHEN FLASHLIGHT IS ON
; Script by documn based on work by Pelinor

short dlinc
short dlinc2
short height
float dlx
float dly
float dlz
float dllookangle   
float dlsinelookangle
float dlcosinelookangle
float dlang
float dluign
float dlsine
float dlcosi
short stage
short whichlast

Short xOffset
Short Yoffset

begin gamemode

;GET ANGLE INFO

Set xOffset to 10
Set yOffset to 75

set dluign to 1
set dlang to player.getangle z
if dlang > 270
       set dlang to dlang - 360
elseif dlang > 90
       set dlang to dlang - 180
       set dluign to -1
endif
set dlsine to dluign * (sin dlang)
set dlcosi to dluign * (cos dlang)

set dllookangle to player.getangle x
set dlsinelookangle to (sin dllookangle)
set dlcosinelookangle to (cos dllookangle)

;HEIGHT CORRECTION IF PLAYER IS SNEAKING
if player.issneaking
   set height to 66
else
   set height to 92
endif

;DISABLE LIGHTS
if stage == 0
   dlt2.disable
   dlt3.disable
   dlt4.disable
   dlt5.disable
   dlt6.disable
   dlt7.disable
   dlt8.disable
   dlt9.disable
   dlt10.disable
   dlt11.disable
   dlt12.disable
   dlt13.disable
   dlt14.disable
   dlt15.disable
   dlt16.disable
   dlt17.disable
   dlt18.disable
   dlt19.disable
   dlt20.disable
   dltlast5.disable
   dltlast10.disable
   dltlast15.disable
   dltlast20.disable
else
   dlu2.disable
   dlu3.disable
   dlu4.disable
   dlu5.disable
   dlu6.disable
   dlu7.disable
   dlu8.disable
   dlu9.disable
   dlu10.disable
   dlu11.disable
   dlu12.disable
   dlu13.disable
   dlu14.disable
   dlu15.disable
   dlu16.disable
   dlu17.disable
   dlu18.disable
   dlu19.disable
   dlu20.disable
   dlulast5.disable
   dlulast10.disable
   dlulast15.disable
   dlulast20.disable
endif

;MOVE LIGHTS
    set dlinc to 0
    set dlinc2 to 50
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt2.moveto player
    dlt2.setpos x dlx
    dlt2.setpos y dly
    dlt2.setpos z dlz
    dlu2.moveto dlt2
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt3.moveto player
    dlt3.setpos x dlx
    dlt3.setpos y dly
    dlt3.setpos z dlz
    dlu3.moveto dlt3
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt4.moveto player
    dlt4.setpos x dlx
    dlt4.setpos y dly
    dlt4.setpos z dlz
    dlu4.moveto dlt4
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt5.moveto player
    dlt5.setpos x dlx
    dlt5.setpos y dly
    dlt5.setpos z dlz
    dlu5.moveto dlt5
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt6.moveto player
    dlt6.setpos x dlx
    dlt6.setpos y dly
    dlt6.setpos z dlz
    dlu6.moveto dlt6
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt7.moveto player
    dlt7.setpos x dlx
    dlt7.setpos y dly
    dlt7.setpos z dlz
    dlu7.moveto dlt7
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt8.moveto player
    dlt8.setpos x dlx
    dlt8.setpos y dly
    dlt8.setpos z dlz
    dlu8.moveto dlt8
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt9.moveto player
    dlt9.setpos x dlx
    dlt9.setpos y dly
    dlt9.setpos z dlz
    dlu9.moveto dlt9
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt10.moveto player
    dlt10.setpos x dlx
    dlt10.setpos y dly
    dlt10.setpos z dlz
    dlu10.moveto dlt10
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt11.moveto player
    dlt11.setpos x dlx
    dlt11.setpos y dly
    dlt11.setpos z dlz
    dlu11.moveto dlt11
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset +  (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt12.moveto player
    dlt12.setpos x dlx
    dlt12.setpos y dly
    dlt12.setpos z dlz
    dlu12.moveto dlt12
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt13.moveto player
    dlt13.setpos x dlx
    dlt13.setpos y dly
    dlt13.setpos z dlz
    dlu13.moveto dlt13
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt14.moveto player
    dlt14.setpos x dlx
    dlt14.setpos y dly
    dlt14.setpos z dlz
    dlu14.moveto dlt14
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt15.moveto player
    dlt15.setpos x dlx
    dlt15.setpos y dly
    dlt15.setpos z dlz
    dlu15.moveto dlt15
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt16.moveto player
    dlt16.setpos x dlx
    dlt16.setpos y dly
    dlt16.setpos z dlz
    dlu16.moveto dlt16
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt17.moveto player
    dlt17.setpos x dlx
    dlt17.setpos y dly
    dlt17.setpos z dlz
    dlu17.moveto dlt17
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt18.moveto player
    dlt18.setpos x dlx
    dlt18.setpos y dly
    dlt18.setpos z dlz
    dlu18.moveto dlt18
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt19.moveto player
    dlt19.setpos x dlx
    dlt19.setpos y dly
    dlt19.setpos z dlz
    dlu19.moveto dlt19
    set dlinc to dlinc + dlinc2
    set dlx to player.getpos x + xOffset + (dlinc * dlsine * dlcosinelookangle)
    set dly to player.getpos y + yOffset + (dlinc * dlcosi * dlcosinelookangle)
    set dlz to player.getpos z + (height * player.getscale) + (-1 * dlinc * dlsinelookangle)
    dlt20.moveto player
    dlt20.setpos x dlx
    dlt20.setpos y dly
    dlt20.setpos z dlz
    dlu20.moveto dlt20

    if player.getlos dlt5 == 0
     set whichlast to 5
     dltlast5.moveto dlt4
     dlulast5.moveto dlt4
     if player.getlos dlt4 == 0
      dltlast5.moveto dlt3
      dlulast5.moveto dlt3
      if player.getlos dlt3 == 0
       dltlast5.moveto dlt2
       dlulast5.moveto dlt2
       if player.getlos dlt2 == 0
        dltlast5.moveto player
        dlulast5.moveto player
       endif
      endif
     endif
    else
     if player.getlos dlt10 == 0
      set whichlast to 10
      dltlast10.moveto dlt9
      dlulast10.moveto dlt9
      if player.getlos dlt9 == 0
       dltlast10.moveto dlt8
       dlulast10.moveto dlt8
       if player.getlos dlt8 == 0
        dltlast10.moveto dlt7
        dlulast10.moveto dlt7
        if player.getlos dlt7 == 0
         dltlast10.moveto dlt6
         dlulast10.moveto dlt6
         if player.getlos dlt6 == 0
          dltlast10.moveto dlt5
          dlulast10.moveto dlt5
         endif
        endif
       endif
      endif
     else
      if player.getlos dlt15 == 0
       set whichlast to 15
       dltlast15.moveto dlt14
       dlulast15.moveto dlt14
       if player.getlos dlt14 == 0
        dltlast15.moveto dlt13
        dlulast15.moveto dlt13
        if player.getlos dlt13 == 0
         dltlast15.moveto dlt12
         dlulast15.moveto dlt12
         if player.getlos dlt12 == 0
          dltlast15.moveto dlt11
          dlulast15.moveto dlt11
          if player.getlos dlt11 == 0
           dltlast15.moveto dlt10
           dlulast15.moveto dlt10
          endif
         endif
        endif
       endif
      else
       if player.getlos dlt20 == 0
        set whichlast to 20
        dltlast20.moveto dlt19
        dlulast20.moveto dlt19
        if player.getlos dlt19 == 0
         dltlast20.moveto dlt18
         dlulast20.moveto dlt18
         if player.getlos dlt18 == 0
          dltlast20.moveto dlt17
          dlulast20.moveto dlt17
          if player.getlos dlt17 == 0
           dltlast20.moveto dlt16
           dlulast20.moveto dlt16
           if player.getlos dlt16 == 0
                    dltlast20.moveto dlt15
                    dlulast20.moveto dlt15
           endif
          endif
         endif
        endif
       endif
      endif
     endif
    endif

;ENABLE LIGHTS
   if stage == 0
    set stage to 1
    dlu2.enable
    dlu3.enable
    dlu4.enable
    dlu5.enable
    dlu6.enable
    dlu7.enable
    dlu8.enable
    dlu9.enable
    dlu10.enable
    dlu11.enable
    dlu12.enable
    dlu13.enable
    dlu14.enable
    dlu15.enable
    dlu16.enable
    dlu17.enable
    dlu18.enable
    dlu19.enable
    dlu20.enable
    if whichlast == 5
     dlulast10.moveto player 0 0 -5000
     dlulast15.moveto player 0 0 -5000
     dlulast20.moveto player 0 0 -5000
    elseif whichlast == 10
     dlulast5.moveto player 0 0 -5000
     dlulast15.moveto player 0 0 -5000
     dlulast20.moveto player 0 0 -5000
    elseif whichlast == 15
     dlulast10.moveto player 0 0 -5000
     dlulast5.moveto player 0 0 -5000
     dlulast20.moveto player 0 0 -5000
    elseif whichlast == 20
     dlulast10.moveto player 0 0 -5000
     dlulast15.moveto player 0 0 -5000
     dlulast5.moveto player 0 0 -5000
    endif
    dlulast5.enable
    dlulast10.enable
    dlulast15.enable
    dlulast20.enable

   else
    set stage to 0
    dlt2.enable
    dlt3.enable
    dlt4.enable
    dlt5.enable
    dlt6.enable
    dlt7.enable
    dlt8.enable
    dlt9.enable
    dlt10.enable
    dlt11.enable
    dlt12.enable
    dlt13.enable
    dlt14.enable
    dlt15.enable
    dlt16.enable
    dlt17.enable
    dlt18.enable
    dlt19.enable
    dlt20.enable
    if whichlast == 5
     dltlast10.moveto player 0 0 -5000
     dltlast15.moveto player 0 0 -5000
     dltlast20.moveto player 0 0 -5000
    elseif whichlast == 10
     dltlast5.moveto player 0 0 -5000
     dltlast15.moveto player 0 0 -5000
     dltlast20.moveto player 0 0 -5000
    elseif whichlast == 15
     dltlast10.moveto player 0 0 -5000
     dltlast5.moveto player 0 0 -5000
     dltlast20.moveto player 0 0 -5000
    elseif whichlast == 20
     dltlast10.moveto player 0 0 -5000
     dltlast15.moveto player 0 0 -5000
     dltlast5.moveto player 0 0 -5000
    endif
    dltlast5.enable
    dltlast10.enable
    dltlast15.enable
    dltlast20.enable
   endif
END

Отключение:
Code
scn xMoTacLightOFF

;TURN OFF LIGHTS
Begin OnAdd player

;STOP QUESTS
stopquest xMoTLQ

;DISABLE LIGHT REFS
    dlr2.moveto player 0 0 -10000
    dlr3.moveto player 0 0 -10000
    dlr4.moveto player 0 0 -10000
    dlr5.moveto player 0 0 -10000
    dlr6.moveto player 0 0 -10000
    dlr7.moveto player 0 0 -10000
    dlr8.moveto player 0 0 -10000
    dlr9.moveto player 0 0 -10000
    dlr10.moveto player 0 0 -10000
    dlr11.moveto player 0 0 -10000
    dlr12.moveto player 0 0 -10000
    dlr13.moveto player 0 0 -10000
    dlr14.moveto player 0 0 -10000
    dlr15.moveto player 0 0 -10000
    dlr16.moveto player 0 0 -10000
    dlr17.moveto player 0 0 -10000
    dlr18.moveto player 0 0 -10000
    dlr19.moveto player 0 0 -10000
    dlr20.moveto player 0 0 -10000
    dlrlast5.moveto player 0 0 -10000
    dlrlast10.moveto player 0 0 -10000
    dlrlast15.moveto player 0 0 -10000
    dlrlast20.moveto player 0 0 -10000

    dls2.moveto player 0 0 -10000
    dls3.moveto player 0 0 -10000
    dls4.moveto player 0 0 -10000
    dls5.moveto player 0 0 -10000
    dls6.moveto player 0 0 -10000
    dls7.moveto player 0 0 -10000
    dls8.moveto player 0 0 -10000
    dls9.moveto player 0 0 -10000
    dls10.moveto player 0 0 -10000
    dls11.moveto player 0 0 -10000
    dls12.moveto player 0 0 -10000
    dls13.moveto player 0 0 -10000
    dls14.moveto player 0 0 -10000
    dls15.moveto player 0 0 -10000
    dls16.moveto player 0 0 -10000
    dls17.moveto player 0 0 -10000
    dls18.moveto player 0 0 -10000
    dls19.moveto player 0 0 -10000
    dls20.moveto player 0 0 -10000
    dlslast5.moveto player 0 0 -10000
    dlslast10.moveto player 0 0 -10000
    dlslast15.moveto player 0 0 -10000
    dlslast20.moveto player 0 0 -10000

    dlt2.moveto player 0 0 -10000
    dlt3.moveto player 0 0 -10000
    dlt4.moveto player 0 0 -10000
    dlt5.moveto player 0 0 -10000
    dlt6.moveto player 0 0 -10000
    dlt7.moveto player 0 0 -10000
    dlt8.moveto player 0 0 -10000
    dlt9.moveto player 0 0 -10000
    dlt10.moveto player 0 0 -10000
    dlt11.moveto player 0 0 -10000
    dlt12.moveto player 0 0 -10000
    dlt13.moveto player 0 0 -10000
    dlt14.moveto player 0 0 -10000
    dlt15.moveto player 0 0 -10000
    dlt16.moveto player 0 0 -10000
    dlt17.moveto player 0 0 -10000
    dlt18.moveto player 0 0 -10000
    dlt19.moveto player 0 0 -10000
    dlt20.moveto player 0 0 -10000
    dltlast5.moveto player 0 0 -10000
    dltlast10.moveto player 0 0 -10000
    dltlast15.moveto player 0 0 -10000
    dltlast20.moveto player 0 0 -10000

    dlu2.moveto player 0 0 -10000
    dlu3.moveto player 0 0 -10000
    dlu4.moveto player 0 0 -10000
    dlu5.moveto player 0 0 -10000
    dlu6.moveto player 0 0 -10000
    dlu7.moveto player 0 0 -10000
    dlu8.moveto player 0 0 -10000
    dlu9.moveto player 0 0 -10000
    dlu10.moveto player 0 0 -10000
    dlu11.moveto player 0 0 -10000
    dlu12.moveto player 0 0 -10000
    dlu13.moveto player 0 0 -10000
    dlu14.moveto player 0 0 -10000
    dlu15.moveto player 0 0 -10000
    dlu16.moveto player 0 0 -10000
    dlu17.moveto player 0 0 -10000
    dlu18.moveto player 0 0 -10000
    dlu19.moveto player 0 0 -10000
    dlu20.moveto player 0 0 -10000
    dlulast5.moveto player 0 0 -10000
    dlulast10.moveto player 0 0 -10000
    dlulast15.moveto player 0 0 -10000
    dlulast20.moveto player 0 0 -10000

    removeme
End

Из небезызвестного Book Of Earache. Собственно, вопрос: а нафига?! Было бы верхом наглости требовать объяснения всего этого чуда скриптинга, потому лишь смиренно прошу кратенького объяснения с изрядной долей профанации.

Номер два.
Игра (или NVSE, не суть важно) позволяет использовать, к примеру, команды setweaponisautomatic, set SFmode, а также ещё куча различных «set», позволяющих временно изменить чуть ли не любой параметр оружия в руках PC. Внимание, вопрос. Есть ли команды, отвечающие за смену моделей и переключение флагов «Has scope» и «has night vision»?

В принципе, если ткнёте носом в место, где всё это написано на русском/английском — тоже буду благодарен :)

UPD: просмотрел документацию NVSE: setsightusage — это про оптику? Сам второй вопрос всё ещё в силе, т.к. документация по их же словам просроченная)
И появился новый, номер три: обязательно ли удалять sighting node у оружия с оптикой? Точнее, чем это грозит?

>>> assert life == pain
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
JupiterJour  Offline  Сообщение №1348 написано: 17 июля 2012, 16:23 | Отредактировано: Joopeeter - 17 июля 2012, 16:24


_


BushWacker, это антигуманно - подсовывать такие скрипты на разбор. Понял только, что несколько десятков (если не сотен) каких-то реф-ссылок (предположительно лампочек) таскаются за игроком и друг за другом. Причём, если не трогали Script Processing Delay квеста, происходит это раз в пять секунд. В остальное время что, лампочки стоят на месте? Фонарик убежал, свет остался?

Heartless  Offline  Сообщение №1349 написано: 17 июля 2012, 16:48


El Pythonisto


Joopeeter, я человеконенавистник lol
Цитата Joopeeter

Причём, если не трогали Script Processing Delay квеста, происходит это раз в пять секунд. В остальное время что, лампочки стоят на месте? Фонарик убежал, свет остался?


Не-а. Лампочка исправно «бегает» за персонажем. И даже светит в нужном направлении. Сделал пару скриншотов:
http://i.imgur.com/TdIHy.jpg http://i.imgur.com/ZU9oz.jpg http://i.imgur.com/0OsES.jpg http://i.imgur.com/4S0sU.jpg

Само собой, ненатурально работает, но работает же! И что самое шокирующее — без потери FPS.

>>> assert life == pain
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
JupiterJour  Offline  Сообщение №1350 написано: 17 июля 2012, 18:19


_


BushWacker, помогли бы не скриншоты, а сведения о том, что из себя представляют перемещаемые ссылки dlt, dlu, dltlast и dlulast, есть ли на них какие-то свои скрипты, и отличается ли Script Processing Delay от дефолтного.
Ну ладно, раз работает, то можно предположить, что квестовый скрипт всё же разогнали до нескольких десятков раз в секунду. Раз не падает FPS, можно предположить, что у тебя не ПК, а целая графическая станция что автору хватило совести запускать этот скриптомонстр не в каждом фрейме, а пореже.
В общих чертах:
В начале пара десятков каких-то объектов (похоже, вспомогательных) выстраиваются в ряд по направлению взгляда игрока, к каждому из них сразу же перемещается ещё по одному (видимо, лампочки). Потом несколько, я полагаю, дополнительных лампочек располагаются возле основных в зависимости от того, на какое расстояние может видеть игрок (мешают ли препятствия). Возможно, это для более яркого освещения предмета, в который упирается "луч". Лишнее, что не видит игрок, отправляется на 5000 единиц вниз, в ад, наверное.
И так каждый раз - каждый фрейм или через один или через два фрейма.
При выключении всё это хозяйство ухает аж на 10000 ед. вниз, а чтоб не вылезло, останавливается квест, в котором, надо думать, находится первый скрипт.
Забавно, при выстраивании в ряд используется player.GetScale, как будто размер игрока может отличаться от единицы.
Как-то так, хотя дополнительные скрипты на каких-либо из упомянутых объектов или просто на рядом лежащих (в инвентаре, к примеру) могут существенно влиять на картину.

Форум » Fallout: New Vegas » Мастерская » ВОПРОСЫ по моддингу (Спрашиваем и отвечаем на тему как сделать то или это...)
Поиск:





Ответ на жалобу смотрите в разделе жалоб