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

Вис691

Управление проектами
  • Публикаций

    1 539
  • Пожертвование

    0,00 ₽ 
  • Зарегистрирован

  • Посещение

  • Победитель дней

    67

Сообщения, опубликованные Вис691


  1. 17 минут назад, DoCx007 сказал:

    Принадлежность не указывается в консоли (извините, не разобрался), могу указать только имя и id

    Вот когда предмет в консоли выделен, пропишите gbo. Вот это и будет верный ID. По первым 2ум цифрам определите модуль (например, через FOMM). А то все ID, начинающиеся с FF, - это временные ID, и никакой информации они не несут :( .

    • Нравится 1

  2. 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 к статистике делает, я не проверял. Но, судя по названию, должна.


  3. У меня, конечно, версия SFW древнейшая, поэтому может быть неактуально, но! Тут 2 куба коллизии.

    Спойлер

    ot7PJlD.png

    xx00DF1C (он вроде выключается) и xx00DBD7 (а вот он остаётся). Аналогично на обратной стороне.

    • Нравится 1

  4. Не, такого нет. OnDeath работать должен, но скрипт просто останавливается. Попробуй в обратную сторону: сделать туррели Enable Parent'ом для коллизии. Тогда, по идее, при смерти туррели автоматом и коллизия уйдёт, без всяких скриптов.

    • Нравится 1

  5. 1 час назад, MagnuMspec сказал:

    Можно наверное, но хз как будут себя вести в момент смерти турели, у которых таких маркеров не сделано.

    Как-то так:

    ref rLinkedCollision
    
    begin OnDeath
    	let rLinkedCollision := GetLinkedRef
    	if rLinkedCollision ; если есть коллизия, т.е. реф не пустой
    		rLinkedCollision.disable
    	endif
    end

    Не уверен, правда, что прямо так сработает, но можно попробовать.

    • Нравится 1
    • Спасибо! 1

  6. 19 часов назад, JluKBuDaToR сказал:

    Вис691, а вы собственно сталкивались с программой FO3LODGen

    Нет, ни разу не пользовался.

     

    19 часов назад, JluKBuDaToR сказал:

    Как это понимать? Какая графа объекта? Как ее обнаружить/открыть?

    Ну и интересные способы создания ярлыков вы используете. Достаточно просто в папке с игрой найти fose_loader.exe, нажать правой кнопкой мыши -> создать ярлык. Ну а потом ПКМ по созданному ярлыку и уже туда дописывайте -editor.

     

    19 часов назад, JluKBuDaToR сказал:

    И какой же гекк можете посоветовать? В доступе так много версий, скачал один, он видимо тоже не подходит)

    На этом сайте должен быть самый обычный. Можно взять отсюда


  7. Обращайте внимание на ошибки - там же написано, что у вас какой-то "не такой" Geck.exe. Вероятно, нужен самый обыкновенный.

     

    13 минут назад, JluKBuDaToR сказал:

    Так же создал ярлык, который при нажатии не работает, но в этом похоже тоже моя ошибка. Поможете разобраться?)

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

     

    14 минут назад, JluKBuDaToR сказал:

    Ну почему, всегда когда я качаю программы с нексуса у меня ничего никогда не работает? :D 

    Рискну предположить, что виной этому не Нексус... :) 


  8. 7 часов назад, JluKBuDaToR сказал:

    Может вы поможете с установкой?

    Ну там вроде сказано следующее:

    Цитата

    manually move the FOSE folder in to your Data folder

    т.е. можно вручную папку FOSE закинуть в папку Data, слив содержимое. Сам ГЕКК уже должен быть установлен - это лишь плагин. Причём конфликтует с PowerUp. Запускать ГЕКК либо с поддержкой FOSE, либо в опциональных файлах лежит некий патчер, который всё сделает за вас. Если по первому пути пойдёте, то просто создаёте ярлык fose_loader.exe (не редактора!) и в графе объект допишите 

     -editor

    (перед дефисом стоит пробел). Ну и запукайте ГЕКК через этот ярлык.

     

    P.S. Сам этот плагин не ставил, всю информацию чисто по описанию с нексуса привёл. Кроме создания ярлыка, это я и сам делал.


  9. В 02.03.2020 в 00:24, YanKoKsy1827 сказал:

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

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

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

    • Нравится 1

  10. Всем привет.

     

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


  11. Исправлять ошибки - это, конечно, хорошо, но главное - не допускать новых :D 

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

    Квест SFWCrashedVertibird -> Quest Stages 60
    строка SFWCrashedVertibirdPilotTrainingSeatREF.setdrestroyed 1
    setdrestroyed- нигде не объявлено и нигде больше не используется.
    Закомментировал строку с ошибкой.

    Без понятия, что это за реф такой, но скорее всего тут имелось в виду SetDestroyed. Соответственно, верным решением будет не закомментировать, а исправить строку.

    • Нравится 2
    • Спасибо! 1

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

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

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


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

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

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

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

     

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


  14. 7 часов назад, Wallymoore сказал:

    Я про GBO узнал только вчера от Вис691 (низкий поклон ему), хотя в Фолаутах вроде не новичок. До этого я честно пытался выяснить: где, что и почём, как раз задавая вопросы в разных темах. Если бы я прочел про GBO где нибудь в FAQ... Ну Вы поняли...

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

    Ну а что же за чудесная такая команда, GBO? Тут всё ещё проще. У многих консольных команд есть сокращённая версия, чтобы было удобнее. GBO = GetBaseObject. Название говорит само за себя - базовый объект он всегда один, а значит и ID у него начинается с номера мода.

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

    • Нравится 1
    • Спасибо! 1

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

     

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

     

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

     

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

     

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

    • Спасибо! 1

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