Перейти к содержанию

Рекомендуемые сообщения

Это как? Все предметы хлама из локации пропасть должны что ли?

Поделиться сообщением


Ссылка на сообщение

Можно поинтересоваться, а какого использование такого скрипта?

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Думаю, такая штука здорово ударит по производительности.

но если что, лутоубийца реализован в Проекте Невада, правда, немного иначе.

  • Спасибо! 1

Поделиться сообщением


Ссылка на сообщение

Приходит ГГ в магазин, а там на полках/витринах пусто. Заходит к себе домой, расставляет предметы по локации, украшает полочки, а потом раз - и всё исчезает)

 

В любом случае, задумку уловил, и вот, как бы я её реализовывал. Вначале нам нужно получить все объекты нужного типа. Сделать это можно при помощи GetRefs. На странице есть ссылка на коды различных типов, так что подобрать нужные не проблема. Чего я не знаю - это значение значения 201:Inventory Object. Есть шанс, что это прямо то, что нужно и охватывает прямо всё-всё-всё, но надо тестировать. Если нет, то придётся по очереди по каждому типу (оружие, броня, медикаменты - всё есть на странице) проходить. Также советую обратить внимание на "passing -1 will use the uGridsToLoad value from Fallout.ini to calculate this". Дальше идём по всем элементам массива через Foreach (опять же, на странице пример есть) и просто их disable, как уже верно было замечено. Можно проверок всяких добавить, например, на то, что предмет ещё не отключён (зачем нам один и тот же предмет мучить и отключать по миллиону раз?).

 

Теперь куда это всё прицепить? Скрипты в воздухе висеть не могут. Самый очевидный вариант это загнать всё это дело в квест, и крутить, крутить, крутить с проверкой на изменение локации. Но это ужасный вариант, так делать не стоит. Тут нужно обратиться к Event'ам, а конкретно к OnCellEnter. Таким образом подсчёт будет происходить только во время смены ячейки, т.е. единожды.

 

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

 

Это был минимальный экскурс в направление, куда копать. Дальше всё зависит от текущих навыков, но если что всегда можно задать мне вопросы, показать нерабочий код и т.д. Удачи :)

  • Спасибо! 1

Поделиться сообщением


Ссылка на сообщение

Аааа блин, я про магазы и жилища не подумал. Эта идея с голой пустошью не спонтанно родилась, я помимо SFW ещё Wasteland 2 прохожу, а там пустошь действительно пустая, максимум можно сундучок с барахлом найти или тайник какой раскопать. Ладно, пусть всё остаётся как есть. Спасибо за сообщения.

2 часа назад, MagnuMspec сказал:

Думаю, такая штука здорово ударит по производительности.

но если что, лутоубийца реализован в Проекте Невада, правда, немного иначе.

У меня эта фишка не работает. Хотя выставил множитель 0 - количество лута зависит напрямую от удачи. Но всё равно локации хламом завалены. 

Поделиться сообщением


Ссылка на сообщение

Прошу помощи в поиске или создании и интеграции скрипта управления активацией лазерного целеуказателя и освещения тактического фонаря через назначаемые клавиши для оружейного мода, который я создаю на протяжении уже более 2 лет. Мод практически готов к релизу, полностью работоспособен, содержит сотни качественных моделей тактического оружия на любой вкус и цвет, интегрированного во все необходимые уровневые списки и адекватно сбалансированного относительно друг друга, способен заменить практически все остальные оружейные моды, кроме разве что пака от Millenia. Осталось лишь создать индивидуальные иконки и внедрить вышеуказанный скрипт. В плане наличие в скрипте привязки к назначаемой клавише ( либо клавише "U") и последовательная активация ( луч1→луч2→луч1+луч2→фонарь→луч1+луч2+фонарь→отключить). Нечто подобное я видел в модах R.S.A. и прочих от Master Shifu и Chaotic Sun от kj666, но не могу без посторонней помощи создать похожее для своего мода.

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

Заранее благодарю всех кто откликнется и сможет помочь хотя бы советом.

 

Поделиться сообщением


Ссылка на сообщение

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

15 часов назад, GardenParadise сказал:

последовательная активация ( луч1→луч2→луч1+луч2→фонарь→луч1+луч2+фонарь→отключить)

Так, я понимаю сами лучи и фонарь уже есть? Если да, то в каком это всё виде? Я с оружием никогда не работал, так что особого представления, как эти лучи и фонари работают у меня нет.

 

С иконками и подавно не подскажу. Вроде там всё на альфа-канале завязано, но могу ошибаться. Навскидку нашёл вот такой краткий туториал.

Поделиться сообщением


Ссылка на сообщение
Цитата

...Если да, то в каком это всё виде?...

Это типичный оружейный мод типа сборников от Happy Hapy Gekkos ( The Armory 2.5 Final), Master Shifu ( BF4 Assault Pack FNV, R.S.A.), kj666 (Chaotic Sun) и т. п., так что за основу можно взять любой из них или им подобный. У Master Shifu и kj666 в их модах уже есть реализация скриптов активации лазерного целеуказателя, тактического фонаря и прицельной марки, но я очень далёк от понимания скриптового языка и не смогу в разумное время справиться без посторонней помощи. Можно взять за основу их скрипты (если подойдут) и переделать под новые требования, либо написать с нуля. В любом случае нужна помощь грамотного скриптолога. 

Поделиться сообщением


Ссылка на сообщение
15 часов назад, GardenParadise сказал:

В любом случае нужна помощь грамотного скриптолога. 

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

Поделиться сообщением


Ссылка на сообщение
Цитата

...Ну уж и грамотным скриптологом я себя точно не назову...

Зато есть связи в сообществе моддеров и возможность потянуть за необходимые ниточки для реализации такого важного для проекта Fallout SFW дополнения. Да, я готов передать все права на мой мод сообществу Falcon-Lair и оказать посильную поддержку в его внедрении в качестве универсальной библиотеки ресурсов, которой смогли бы пользоваться на базовой основе (по типу SFW-Master) все остальные моддеры. Это на самом деле важно, так как кроме огромного ресурса в виде коллекции лучшего из доступного в сети огнестрельного оружия (более 20 Гбайт), мод заменяет всё ванильное (и невыносимо убогое) на качественное и абсолютно адекватное сеттингу. Поэтому надеюсь на всеобщее понимание и посильную поддержку всех небезразличных к проекту Fallout SFW.

Поделиться сообщением


Ссылка на сообщение

Всем привет.

 

Недавно ко мне обратился 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 - проверять остальные предметы нам не надо.

 

Ну вот в общем-то и всё. Запихните этот скрипт туда. куда нужно и вы восхитительны. Точнее я восхитителен :D 

Поделиться сообщением


Ссылка на сообщение

Вот у меня такой вопрос: а где собственно узнавать все команды, переменные, и т.д для скрипта? 

Возможно, я немного туплю, но в скриптописании я и не шарю (но приходится) 

Поделиться сообщением


Ссылка на сообщение
В 02.03.2020 в 00:24, YanKoKsy1827 сказал:

Вот у меня такой вопрос: а где собственно узнавать все команды, переменные, и т.д для скрипта? 

Возможно, я немного туплю, но в скриптописании я и не шарю (но приходится) 

https://geckwiki.com/index.php?title=Category:Functions

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

Салам пополам господа писцы братства скрипта
Тема такая
Хочу сделать ключ, который бы запирал/отпирал двери у которых изначально ключ отсутствует.
Вопрос такой: Это возможно? (потому что логически можно написать скрипт который бы детектил тригер/скрипт дверей в ячейке мира в которой игрок находится

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

Есть два мода связанные с ключами.
это читерский в котором при имении ключа в инвентаре игроку добавляется перк в котором просто консольная команда Unlock
И более интересный - но не менее бесполезный, позволяющий открывать и запирать двери от которых у тебя есть ключ, и то работает абы как.
Например можно открыть и запереть дверь снаружи, но при перемещении в интерьер, он уже пишет что у тебя от этой двери ключа нет, собственно я и не удивлен, потому что айди у двери/триггера другой, поскольку это совсем другая локация.
Ну шо, интересная задачка?)
 

Поделиться сообщением


Ссылка на сообщение
15 часов назад, Glain сказал:

Это возможно?

Нынче много чего стало возможно. Эта задачка - не исключение. В принципе процесс был уже описан - собрать все двери в локации, прописать им ключ. Подход видится простой: на заход в локацию срабатывает OnCellEnter. Вешаем на этот ивент скрипт, который пройдётся по объектам в ячейке и найдёт двери (например через GetFirstRef) и пропишет им ключ через SetOpenKey. Я бы, конечно, ещё проверял бы, а заперта ли дверь вообще, и уровень замка, чтобы недоступные двери не трогать. Можно ещё и контейнеры докинуть, чтобы совсем чудо-ключ получился.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


×
×
  • Создать...