-
Публикаций
1 539 -
Пожертвование
0,00 ₽ -
Зарегистрирован
-
Посещение
-
Победитель дней
67
Сообщения, опубликованные Вис691
-
-
bbperkquestSCPT, самый конец:
if lockxp > 0 set lockxp to lvllock / 25 if lockxp < 1 set lockxp to 1 elseif lockxp > 4 set lockxp to 4 endif if lockxp == 1 rewardXP trapxprewardVeryEasy elseif lockxp == 2 rewardXP trapxprewardEasy elseif lockxp == 3 rewardxp trapxprewardAverage elseif lockxp == 4 rewardxp trapxprewardHard endif set lockxp to 0 endif
Вот сюда можно, после set lockxp to 0, например. Это сразу покроет взлом ножом, стрельбой, чем угодно. Единственное, я не совсем уверен, что та команда, что я выше написал, именно +1 к статистике делает, я не проверял. Но, судя по названию, должна.
-
Если очень хочется, то можно в скрипт ModPCMiscStat "Locks Picked" 1 добавить.
- 1
-
У меня, конечно, версия SFW древнейшая, поэтому может быть неактуально, но! Тут 2 куба коллизии.
Спойлерxx00DF1C (он вроде выключается) и xx00DBD7 (а вот он остаётся). Аналогично на обратной стороне.
- 1
-
Не, такого нет. OnDeath работать должен, но скрипт просто останавливается. Попробуй в обратную сторону: сделать туррели Enable Parent'ом для коллизии. Тогда, по идее, при смерти туррели автоматом и коллизия уйдёт, без всяких скриптов.
- 1
-
Хмм, тут всё грустно. Турельки умирают и их скрипты сразу останавливаются, т.к. от них ничего не остаётся... Надо думать.
-
1 час назад, MagnuMspec сказал:Можно наверное, но хз как будут себя вести в момент смерти турели, у которых таких маркеров не сделано.
Как-то так:
ref rLinkedCollision begin OnDeath let rLinkedCollision := GetLinkedRef if rLinkedCollision ; если есть коллизия, т.е. реф не пустой rLinkedCollision.disable endif end
Не уверен, правда, что прямо так сработает, но можно попробовать.
- 1
- 1
-
-
19 часов назад, JluKBuDaToR сказал:Вис691, а вы собственно сталкивались с программой FO3LODGen
Нет, ни разу не пользовался.
19 часов назад, JluKBuDaToR сказал:Как это понимать? Какая графа объекта? Как ее обнаружить/открыть?
Ну и интересные способы создания ярлыков вы используете. Достаточно просто в папке с игрой найти fose_loader.exe, нажать правой кнопкой мыши -> создать ярлык. Ну а потом ПКМ по созданному ярлыку и уже туда дописывайте -editor.
19 часов назад, JluKBuDaToR сказал:И какой же гекк можете посоветовать? В доступе так много версий, скачал один, он видимо тоже не подходит)
На этом сайте должен быть самый обычный. Можно взять отсюда
-
Обращайте внимание на ошибки - там же написано, что у вас какой-то "не такой" Geck.exe. Вероятно, нужен самый обыкновенный.
13 минут назад, JluKBuDaToR сказал:Так же создал ярлык, который при нажатии не работает, но в этом похоже тоже моя ошибка. Поможете разобраться?)
Ну хотя бы скриншотик того, что в ярлык прописали. Я не могу из ниоткуда догадаться, что пошло не так
14 минут назад, JluKBuDaToR сказал:Ну почему, всегда когда я качаю программы с нексуса у меня ничего никогда не работает?
Рискну предположить, что виной этому не Нексус...
-
7 часов назад, JluKBuDaToR сказал:Может вы поможете с установкой?
Ну там вроде сказано следующее:
Цитатаmanually move the FOSE folder in to your Data folder
т.е. можно вручную папку FOSE закинуть в папку Data, слив содержимое. Сам ГЕКК уже должен быть установлен - это лишь плагин. Причём конфликтует с PowerUp. Запускать ГЕКК либо с поддержкой FOSE, либо в опциональных файлах лежит некий патчер, который всё сделает за вас. Если по первому пути пойдёте, то просто создаёте ярлык fose_loader.exe (не редактора!) и в графе объект допишите
-editor
(перед дефисом стоит пробел). Ну и запукайте ГЕКК через этот ярлык.
P.S. Сам этот плагин не ставил, всю информацию чисто по описанию с нексуса привёл. Кроме создания ярлыка, это я и сам делал.
-
В 02.03.2020 в 00:24, YanKoKsy1827 сказал:Вот у меня такой вопрос: а где собственно узнавать все команды, переменные, и т.д для скрипта?
Возможно, я немного туплю, но в скриптописании я и не шарю (но приходится)- 1
-
Всем привет.
Недавно ко мне обратился AllanMetropol18 с просьбой помочь ему с небольшим скриптом. Не раскрывая подробностей (да-да, кое-что готовится к релизу), скажу лишь, что есть набор предметов (пускай типа хлам) и у одного из НПС есть один из этих предметов в инвентаре. Для того чтобы было интереснее, будем считать, что какой из предметов конкретно попал к НПС, определялось случайным образом. Вопрос был предельно прост - можно ли в определённый момент времени (для простоты будем считать, что по завершению какого-нибудь квеста) передать этот предмет игроку?
Т.к. НПС был ванильным, я предположил, что этот предмет добавляется в его инвентарь через какой-то скрипт. И, конечно, моя идея заключалась в том, чтобы найти этот скрипт, найти момент передачи и запомнить, какой из предметов был выбран рандомом. Затем, в нужный момент времени просто передаём наш запомненный предмет игроку. Звучит невероятно просто, не правда ли? Как выяснилось, существовала небольшая проблема - исходники всех скриптов были вырезаны автором мода... Несложно догадаться, что это несколько усложнило задачу. Что же делать. есть ли выход?
Предлагаю вашему вниманию финальный фрагмент кода. Естественно, заработало всё не с первого раза, а т.к. тестами в игре занимался не я, то процесс немного затянулся.
scn aaaCoolScriptName array_var aItems array_var Entry ref rItem begin GameMode let aItems := NPCRef.GetAllItemRefs 31 ; получить список предметов типа хлам в инвентаре НПС forEach Entry <- aItems ; цикл по всем объектам массива let rItem := Entry["value"] ; получить ref предмета if (rItem.IsInList ItemsList) ; проверить, что предмет есть в списке let rItem := rItem.gbo ; получить базовый объект NPCRef.RemoveItemTarget rItem Player 1 1 ; передать предмет игроку, сбросить владельца break ; выйти из цикла endif loop End
В принципе, из комментариев должно быть всё понятно, но давайте всё же кратко пройдёмся по коду. Первым делом мы получаем список всех предметов из инвентаря НПС:
let aItems := NPCRef.GetAllItemRefs 31
31 здесь задаёт тип возвращаемых предметов - в нашем случае хлам. Если ничего не указать, то вернётся массив из абсолютно всех предметов, которые есть у НПС. Подробнее про функцию и её параметры тут. Кстати, заметьте, что здесь мы собираем именно ref'ы предметов, а не их базовые объекты. Почему так, станет понятно позднее.
Начинаем цикл, вытягиваем ref из массива. Тут всё стандартно. Если кому нужно подробнее, то идите сюда.
А вот и причина использования ref'ов:
if (rItem.IsInList ItemsList)
Дело в том, что на базовых объектах данная функция отказывается работать, о чём можно понять по странице из вики. На самом деле есть альтернатива из плагина NX, которая сработает и с базовым объектом, но это лишняя зависимость, при том не самая популярная. У меня, например, этого плагина нет. А у вас? ItemsList - это form list из всех объектов, из которого и выбирается случайный. В моде он уже существовал, но создать его в случае необходимости несложно. Соответственно, мы проверяем, есть ли текущий предмет из инвентаря в этом списке. Если нет, то переходим к следующему предмету. Если да, то это и есть наш искомый, случайный предмет, который мы ищем. В таком случае мы находим его базовый объект через GBO (GetBaseObject) и передаём игроку:
NPCRef.RemoveItemTarget rItem Player 1 1
Да, это JIP, но он-то уж наверняка у всех есть. Да и в моде наверняка идёт, как одно из требований. Однако никто не мешает разделить на 2 команды: NPCRef.removeItem и player.addItem. Тут уже выбирайте сами. После этого из цикла выходим через break - проверять остальные предметы нам не надо.
Ну вот в общем-то и всё. Запихните этот скрипт туда. куда нужно и вы восхитительны. Точнее я восхитителен
-
-
Или пользоваться Ctrl-F на странице со списком функций
-
Исправлять ошибки - это, конечно, хорошо, но главное - не допускать новых .
2 часа назад, WarpVoid сказал:Квест SFWCrashedVertibird -> Quest Stages 60
строка SFWCrashedVertibirdPilotTrainingSeatREF.setdrestroyed 1
setdrestroyed- нигде не объявлено и нигде больше не используется.
Закомментировал строку с ошибкой.Без понятия, что это за реф такой, но скорее всего тут имелось в виду SetDestroyed. Соответственно, верным решением будет не закомментировать, а исправить строку.
- 2
- 1
-
15 часов назад, GardenParadise сказал:В любом случае нужна помощь грамотного скриптолога.
Помощь бывает разная. Это моя школа, я тут учитель и максимум могу помочь советом или посмотреть на что-то готовое, но, возможно, неработающее. Писать что-то за кого-то я уже не хочу, да и не могу в связи с отсутствием времени. Если где-то уже есть подобный функционал, то предлагаю попытаться разобраться в нём. Хотя чтение чужого кода зачастую бывает непростой задачей, даже если ты в этом что-то понимаешь. Ну уж и грамотным скриптологом я себя точно не назову)
-
Чтобы я мог хоть как-то помочь, нужно чуть подробнее рассказать про то, что готово и в каком оно виде.
15 часов назад, GardenParadise сказал:последовательная активация ( луч1→луч2→луч1+луч2→фонарь→луч1+луч2+фонарь→отключить)
Так, я понимаю сами лучи и фонарь уже есть? Если да, то в каком это всё виде? Я с оружием никогда не работал, так что особого представления, как эти лучи и фонари работают у меня нет.
С иконками и подавно не подскажу. Вроде там всё на альфа-канале завязано, но могу ошибаться. Навскидку нашёл вот такой краткий туториал.
-
12 часов назад, AllanMetropol18 сказал:Спасибо, добрый человек. Буду пробовать)
Спрашивай, если работать не будет - разберёмся)
-
7 часов назад, Wallymoore сказал:Я про GBO узнал только вчера от Вис691 (низкий поклон ему), хотя в Фолаутах вроде не новичок. До этого я честно пытался выяснить: где, что и почём, как раз задавая вопросы в разных темах. Если бы я прочел про GBO где нибудь в FAQ... Ну Вы поняли...
Пару слов про GBO и айдишники с FF. Начнём с того, что даже FF - это две цифры, просто они шестнадцатеричные. Это, пожалуй, многие и так знают. Однако значение FF многие не понимают. Действительно, ведь мода с таким номером в ФОММе нет! Дело в том, что многие объекты в игре - временные. Нужны они по понятным причинам - память не резиновая, нет возможности все объекты хранить в ней постоянно. Соответственно для таких объектов номер начинается с FF. Почему именно FF? Не знаю, но предположу, что так как такого числа модов у игрока точно не будет. Максимальное двухзначное число как-никак.
Ну а что же за чудесная такая команда, GBO? Тут всё ещё проще. У многих консольных команд есть сокращённая версия, чтобы было удобнее. GBO = GetBaseObject. Название говорит само за себя - базовый объект он всегда один, а значит и ID у него начинается с номера мода.
Я на самом деле тоже когда-то не знал, что же это за айдишники такие странные. А потом нагуглил эту информацию и поделился с теми, кому это было интересно. Добавить бы эту инфу в памятку на баг-трекере... Авось кто прочитает и воспользуется.
- 1
- 1
-
12 минут назад, Wallymoore сказал:Ввести GBO и затем клацнуть на объект?
Наоборот
- 1
-
29 минут назад, Wallymoore сказал:Первые 2 цифры показывает ff
Тогда надо ввести GBO
-
Ткни в консоли на предмет/персонажа из мода - первые 2 цифры из ID - это номер плагина в ФОММ.
-
elseif Stage == 4 && (Player.GetDistance XRocketTestBaseLocation < 5000 || Player.GetDistance XRocketTestBaseLocationDC < 5000)
-
Приходит ГГ в магазин, а там на полках/витринах пусто. Заходит к себе домой, расставляет предметы по локации, украшает полочки, а потом раз - и всё исчезает)
В любом случае, задумку уловил, и вот, как бы я её реализовывал. Вначале нам нужно получить все объекты нужного типа. Сделать это можно при помощи GetRefs. На странице есть ссылка на коды различных типов, так что подобрать нужные не проблема. Чего я не знаю - это значение значения 201:Inventory Object. Есть шанс, что это прямо то, что нужно и охватывает прямо всё-всё-всё, но надо тестировать. Если нет, то придётся по очереди по каждому типу (оружие, броня, медикаменты - всё есть на странице) проходить. Также советую обратить внимание на "passing -1 will use the uGridsToLoad value from Fallout.ini to calculate this". Дальше идём по всем элементам массива через Foreach (опять же, на странице пример есть) и просто их disable, как уже верно было замечено. Можно проверок всяких добавить, например, на то, что предмет ещё не отключён (зачем нам один и тот же предмет мучить и отключать по миллиону раз?).
Теперь куда это всё прицепить? Скрипты в воздухе висеть не могут. Самый очевидный вариант это загнать всё это дело в квест, и крутить, крутить, крутить с проверкой на изменение локации. Но это ужасный вариант, так делать не стоит. Тут нужно обратиться к Event'ам, а конкретно к OnCellEnter. Таким образом подсчёт будет происходить только во время смены ячейки, т.е. единожды.
К сожалению, я не могу предсказать, насколько сильно подобная штука будет грузить игру, но в теории должно потянуть.
Это был минимальный экскурс в направление, куда копать. Дальше всё зависит от текущих навыков, но если что всегда можно задать мне вопросы, показать нерабочий код и т.д. Удачи
- 1
Еда и ядер-кола (F3)
в Баг-трекер SFW Ruined America (RA)
Опубликовано
Вот когда предмет в консоли выделен, пропишите gbo. Вот это и будет верный ID. По первым 2ум цифрам определите модуль (например, через FOMM). А то все ID, начинающиеся с FF, - это временные ID, и никакой информации они не несут .