Перейти к содержимому


Фотография

Вопросы по скриптам

papyrus help скрипты вопросы

  • Авторизуйтесь для ответа в теме

#761 Ссылка на это сообщение Potatoider

Potatoider
  • Знаменитый оратор


  • 4 350 сообщений
  •    

Отправлено

Тема для вопросов по скриптингу.

Функции папируса:

На английском

На русском (не все, но базис)



 




  • Авторизуйтесь для ответа в теме
Сообщений в теме: 832

#762 Ссылка на это сообщение aaa112aaa

aaa112aaa
  • Новенький
  • 28 сообщений

Отправлено

И снова здравствуйте.

 

Почему когда добавляю новые формы в FormList, старые пропадают, не помню уже все или только часть, вчера в игре тестировал, сегодня ещё нет.

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

Вот функция сканирования COCMarkerHeading в радиусе и добавления в форм лист.

ScanCOCMH

 

И Вот кусок кода отвечающий за вывод списка:

MaimMenuMarkAndRecall

Сообщение отредактировал aaa112aaa: 03 ноября 2021 - 04:48


#763 Ссылка на это сообщение aaa112aaa

aaa112aaa
  • Новенький
  • 28 сообщений

Отправлено

И снова здравствуйте.

 

Почему когда добавляю новые формы в FormList, старые пропадают, не помню уже все или только часть, вчера в игре тестировал, сегодня ещё нет.

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

Я понял почему. Он не пропадал, просто почему-то по скайриму натыканы дополнительно маркеры с FormID = 20 и поэтому, он в списке, но название другое.



#764 Ссылка на это сообщение aaa112aaa

aaa112aaa
  • Новенький
  • 28 сообщений

Отправлено

И снова здравствуйте.

 

есть несколько переменных, но сейчас проблема с этой - ObjectReference[] Property Recall  Auto 

 

Объявлена, потом идёт вызов функции, в которой переменным присваиваются значения, краткий кусок кода: 


Function PropertiesInit()
	Localisation()
	If(bOnly16 == true)
		iMaxArrayIndex = 15
		sCN = new String[16]
		Recall = new ObjectReference[16]
		RecallNameList = new String[16]
	Else
		iMaxArrayIndex = 31
		sCN = new String[32]
		Recall = new ObjectReference[32]
		RecallNameList = new String[32]
	EndIf
	self.SetRecall()

И далее начинает работу SetRecall() и тут проблема, до индекса 16 ObjectReference не равно None, с индекса 16 по 31 все None, вот сама функция:


function SetRecall()
	Int t = 0
	while t <= iMaxArrayIndex
		Recall[t] = (self.GetNthAlias(t) as ReferenceAlias).GetRef()
		;Notification("Recall "+Recall[t])
		t += 1
	endWhile
endFunction

хотя в квесте всё нормально...

703aab2287c3640e061de8883b5f7c47.jpg



#765 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

хотя в квесте всё нормально...

А переменная там у тебя правильно установлена, чтоб скрипт по 32 позициям проходил?



#766 Ссылка на это сообщение aaa112aaa

aaa112aaa
  • Новенький
  • 28 сообщений

Отправлено

А переменная там у тебя правильно установлена, чтоб скрипт по 32 позициям проходил?

Ну я же написал что, да - iMaxArrayIndex = 31



#767 Ссылка на это сообщение aaa112aaa

aaa112aaa
  • Новенький
  • 28 сообщений

Отправлено

И ещё кстати, а есть кто разбирается в диалогах, в какую мне это тему на форуме? создал нпс, три фракции 2 креста и диалоги, ток вот диалоги у нпс не отображаются, даже если нет условий для показа топика.



#768 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Ну я же написал что, да - iMaxArrayIndex = 31

Два разных массива сделай, для 32 и 16 переменных.

 

И ещё кстати, а есть кто разбирается в диалогах, в какую мне это тему на форуме? создал нпс, три фракции 2 креста и диалоги, ток вот диалоги у нпс не отображаются, даже если нет условий для показа топика.

Сюда.



#769 Ссылка на это сообщение Bosmer

Bosmer
  • Новенький
  • 8 сообщений
  •  

Отправлено

Привет, друзья. 

У меня возникла очень странная проблема со скриптом Manual Light Switch, и я не нашла подобных обсуждений на форумах. 

 

 

Вот этот скрипт

 

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

 

С самим скриптом все нормально при компиляции. Сложность возникает при работе со ссылкой на источник, когда нужно вручную ее указать в поле EnableMarker/Object Reference. (это поле появляется автоматически после успешной компиляции скрипта и его нужно только правильно настроить). Т.о. я выбираю в окне редактора свой источник света, сохраняю объект, но ничего не происходит. Смотрите скриншот. 

 

9d154f77136d.png

 

16aeb0c38f2f.png

 

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

 

Это простой скрипт, но я застряла. :( 

В чем может быть проблема? 

Я делаю все по инструкции от уважаемого GKalian вот отсюда https://youtu.be/Esd1tguUVE0

В других мануалах тоже ничего особенного на эту тему нет, никто не знает, что это может быть за проблема. 

Я все внимательно проверила уже раз 150, но ничего особенного не нахожу...

У вас есть какие-нибудь идеи?...


Сообщение отредактировал Bosmer: 14 февраля 2022 - 10:48


#770 Ссылка на это сообщение Meridiano

Meridiano
  • Профи

  • 448 сообщений
  •    

Отправлено

Привет, друзья. 

У меня возникла очень странная проблема со скриптом Manual Light Switch, и я не нашла подобных обсуждений на форумах.

 

При заполнении Property объектом А в скрипте на объекте Б, объект А и не должен быть показан в Linked Ref, этот раздел сделан для другого. В видео Кальяна используется раздел Enable Parent, который работает по принципу "дерева" - при включении одного объекта включаются все зависимые, при выключении - выключаются.

 

То есть вы прикрепляете скрипт к объекту, в Property указываете какой-нибудь невидимый маркер, далее указываете этот маркер во всех зависимых объектах. В горящем костре и источнике света он будет указан как обычно, а для потухшего костра вам нужно будет поставить галочку "Set Enable State to Opposite of Parent", чтобы при отключении маркера этот потухший костёр включался.

 

Если вы не уверены, срабатывает ли активация и правильно ли заполнен Property, вы можете использовать функцию Debug.MessageBox, чтобы вывести нужную информацию. Примерно вот так:

Event OnActivate(ObjectReference akActionRef)
    Debug.MessageBox("Activation in LightsOff state fired, EnableMarker is " + EnableMarker as String + ", going to state LightsOn")
    GoToState("LightsOn")
EndEvent

Подобные сообщения можно разместить тут и там, а когда вас всё устроит - убрать или закомментировать.


————————————
don't forget your falls
————————————


#771 Ссылка на это сообщение Bosmer

Bosmer
  • Новенький
  • 8 сообщений
  •  

Отправлено

При заполнении Property объектом А в скрипте на объекте Б, объект А и не должен быть показан в Linked Ref, этот раздел сделан для другого.

 

Здравствуйте, и большое спасибо Вам за быстрый ответ!

 

На самом деле меня сбил с толку мод Fort Highwood от Ithlia, где были реализованы подобные лампы с огнем. Я разобрала эти лампы в конструкторе, чтобы посмотреть как объекты взаимодействуют друг с другом, и там как раз было задействовано поле Linked Ref в отношении источника света, что и привело меня к выводу, что оно должно быть заполнено при работе со скриптом. К сожалению посмотреть ресурс скрипта не удалось, т.к. автор не предоставил это. Но визуально это напоминало скрипт Manual Light Switch. 

 

Моя проблема решилась! Но она решилась совершенно неожиданным образом. Я не знаю, будет ли эта информация полезной для всех или это только мой частный случай с моим загадочным модом, но не все модели игры, которые вы захотите использовать в качестве активаторов подходят для работы с этим скриптом. Например, модель сухих дров (Static\FireplaceWood01Off0000) вообще не работает в кач-ве активатора, а пещерная лампа (Static\CaveLamp01, которая была использована у Ithlia) хоть и может гипотетически работать как активатор, но скрипт на ней не срабатывает. Мое решение было в том, чтобы заменить модель активатора на модель маркера с невидимой коллизией (Markers\Misc\InvisibleCollision01). И все заработало! 

 

04ae6fb2aeb4.jpg

 

И еще, может быть кому-то будет полезно, если Вы захотите делать такой же скрипт, то не нужно добавлять в сам активатор звук горения. Он не исчезает автоматически после того, как Вы "потушите" камин. Лучше это тоже реализовать через скрипт. 



#772 Ссылка на это сообщение Meridiano

Meridiano
  • Профи

  • 448 сообщений
  •    

Отправлено

не все модели игры, которые вы захотите использовать в качестве активаторов подходят для работы с этим скриптом

 

Это из-за того, что не все модели имеют коллизии - физические границы, за которые ГГ может "уцепиться" в игре. Действительно, модель FireplaceWood01Off.nif не имеет коллизий, а InvisibleCollision01.nif имеет. Заметьте, что создание коллизии произвольной формы через готовую модель сделать нельзя, как и "прозрачную" для перемещения коллизию только для активации. Это решается созданием Primitive, объекта простой формы, который в игре может быть "твёрдым" или "прозрачным" и по желанию - активируемым. Вы сможете придать ему форму сферы и накрыть им костёр так, чтобы он визуально совпадал с границами костра.


————————————
don't forget your falls
————————————


#773 Ссылка на это сообщение Bosmer

Bosmer
  • Новенький
  • 8 сообщений
  •  

Отправлено

Это из-за того, что не все модели имеют коллизии - физические границы, за которые ГГ может "уцепиться" в игре.


Большое Вам спасибо за ценную информацию, Вы мне очень помогли!

#774 Ссылка на это сообщение Bosmer

Bosmer
  • Новенький
  • 8 сообщений
  •  

Отправлено

Привет, друзья! Мне снова нужен совет и помощь в поиске или составлении скрипта. Подскажите, пожалуйста, какой скрипт из существующих подойдёт для такого алгоритма.
1. Активация объекта
2. Проверка скриптом у игрока наличия/отсутствия в инвентаре определенных предметов.
3. Изъятие этих предметов, если они есть(1) или сообщение о том, что их нет. (0)
4. 1.Таймер и сообщение (Типа подождите несколько дней)
5. Получение игроком указанных предметов после окончания срока, установленного в скрипте.
6. При воздействии на активатор раньше срока сообщение, "подождите ещё столько-то времени".
Смысл скрипта - растянутый во времени крафт. Т.е. чтобы получить предметы не сразу, а только спустя какое-то время. Подобный скрипт есть в модах у Кораны для Обливион. Может что-то такое уже есть и для Скайрима, но я могу знать все моды, мне ещё такие не попадались. :(

#775 Ссылка на это сообщение Dakost

Dakost
  • Новенький
  • 1 сообщений

Отправлено

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

https://prnt.sc/DAgefHxcWsDa


Сообщение отредактировал Dakost: 08 марта 2022 - 23:05


#776 Ссылка на это сообщение SirLuciusFreyr

SirLuciusFreyr
  • Новенький
  • 2 сообщений

Отправлено

Доброго времени суток, господа-программисты. Просветите, чем ModActorValue и ForceActorValue отличаются между собой?



#777 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Доброго времени суток, господа-программисты. Просветите, чем ModActorValue и ForceActorValue отличаются между собой?

Первое модифицирует - т.е. добавляет к исходному.

Второе устанавливает значение, вне зависимости от исходного.



#778 Ссылка на это сообщение SirLuciusFreyr

SirLuciusFreyr
  • Новенький
  • 2 сообщений

Отправлено

Первое модифицирует - т.е. добавляет к исходному.

Второе устанавливает значение, вне зависимости от исходного.

 

Тогда в чём отличие SetActorValue от ForceActorValue? У них какие-то разные области применения внутри списка ActorValue? Или ускользающая от меня разница в том, как они применяются на атрибуты?

 

Ещё один вопрос: а могу я скриптом динамически изменять скорость игрока по нажатию клавиши и без конфликта с другими модификаторами? Как реализовать такой скрипт в игре, повесить через перк?


Сообщение отредактировал SirLuciusFreyr: 28 марта 2022 - 07:07


#779 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

У них какие-то разные области применения внутри списка ActorValue? Или ускользающая от меня разница в том, как они применяются на атрибуты?

Есть базовый показатель, и есть после модификаторов. И это все сложно взаимосвязано.

Ведь кроме Force и Mod есть еще Set, Damage и Restore.

Почитай примечания на страницах, там есть на эту тему кое что.

Еще могу порекомендовать страницу для "консольных" версий этих команд посмотреть (не для скриптовых). Там тоже кое-что написано.

 

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

 

 

Ещё один вопрос: а могу я скриптом динамически изменять скорость игрока по нажатию клавиши и без конфликта с другими модификаторами?

 

Скрипты медленно работают для быстрого и динамического изменения скорости (ну, например, ускорять персонажа на n% k раз в секунду - для реализации медленного набора скорости, например). Тут плагин под skse писать надо.

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



#780 Ссылка на это сообщение Кайо

Кайо
  • Новенький
  • 8 сообщений

Отправлено

Всем ЗДРАВИЯЖЕЛАЮ! Ребяты, памагитя! Кайо совсем не шарит в скриптах и прочих сложных фишках редахтора, но Кайо очень нужен скрипт на "сновидения". То есть, вот персонаж, выполняя квест Арретино, ложится спать в любом месте и просыпается у Тёмного Братства, а мне надо, чтобы он на определённой стадии авторского квеста лёг и проснулся в отдельной локации сна. Можно, конечно, подсмотреть в квесты ТБ, как они замечают событие сна, телепорт там пришить и всё такое, но там обычно черт ногу сломит, особенно, если не знаешь, где искать, да и одну очень важную проблему это не решит: по завершению сна (при смене стадии квеста или после диалога) игрока надо перенести обратно к той же самой кровати, на которой он уснул. К тому же, если это возможно и не особо сложно в реализации, хотелось бы на время сна добавить игроку ограничения: "перегруженность" (чтобы не бегал, а шел простым шагом тихоходки) и чтобы не мог зайти в инвентарь, достать оружие или подобрать что-то (это ж не сны с Фредди Крюггером, откуда можно шляпу спереть, да и авось ему взбредёт в голову мысля что-то выбросить? Это должен быть именно сон, почти как обычный), и чтобы потом с него эти эффекты снимались.


Сообщение отредактировал Кайо: 14 апреля 2022 - 12:15


#781 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Всем ЗДРАВИЯЖЕЛАЮ! Ребяты, памагитя! Кайо совсем не шарит в скриптах и прочих сложных фишках редахтора, но Кайо очень нужен скрипт на "сновидения". То есть, вот персонаж, выполняя квест Арретино, ложится спать в любом месте и просыпается у Тёмного Братства, а мне надо, чтобы он на определённой стадии авторского квеста лёг и проснулся в отдельной локации сна. Можно, конечно, подсмотреть в квесты ТБ, как они замечают событие сна, телепорт там пришить и всё такое, но там обычно черт ногу сломит, особенно, если не знаешь, где искать, да и одну очень важную проблему это не решит: по завершению сна (при смене стадии квеста или после диалога) игрока надо перенести обратно к той же самой кровати, на которой он уснул. К тому же, если это возможно и не особо сложно в реализации, хотелось бы на время сна добавить игроку ограничения: "перегруженность" (чтобы не бегал, а шел простым шагом тихоходки) и чтобы не мог зайти в инвентарь, достать оружие или подобрать что-то (это ж не сны с Фредди Крюггером, откуда можно шляпу спереть, да и авось ему взбредёт в голову мысля что-то выбросить? Это должен быть именно сон, почти как обычный), и чтобы потом с него эти эффекты снимались.

Да, смотришь как это сделано в квесте ТБ, делаешь так же.

Наверняка там какая-то система отслеживания встроена, в квест или на игрока напрямую, которая включается по эвентам OnSleepStart или OnSleepStop.

 

Сделать обратный перенос просто - когда триггер сна срабатывает, перед непосредственным переносом ставишь маркер на позицию игрока. В конце сна переносишь игрока назад на этот маркер. Маркер потом удаляешь.

 

Что касается запрещения игроку что-то делать - есть команда DisablePlayerControls.

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

Хотя может есть и какой-то другой, более элегантный способ.







Темы с аналогичным тегами papyrus, help, скрипты, вопросы

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых