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


Фотография

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

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

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

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

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


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

Отправлено

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

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

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

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



 




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

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

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

Отправлено

PlayGamebryoAnimation 

PlayGamebryoAnimation работает иначе. У него другой синтаксис.

https://www.creation...ObjectReference



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

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

Отправлено

Да, еще попробуй вот это

https://www.creation...ObjectReference

https://www.creation...ObjectReference

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

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



#604 Ссылка на это сообщение CISCO.:i:..:i:.

CISCO.:i:..:i:.
  • Талант
  • 257 сообщений
  •  

Отправлено

Azazellz большое спасибо за советы - буду пробовать



#605 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

Драсте... :)

В игрюлю всяко переиграл.... С кучей модов превратил игру в пошаговую стратегию... Не хочется отпускать игрулю - нравится... Решил идти путем модостроения, сделать мод под себя... Вообщем типа мододел любитель.(Это про себя, чтобы уровень был понятен...) 

Для начала вопрос...Вытащил скрипт с мода с купальней, c раздеванием проблем нет, а вот с одеванием проблема  :sad: .

То что ГГ не одевается, эт понятно... в коде этого нет... но в том моде мои стражники после купальни одеваются...тот же скрипт у меня - хоть убей...Не хотят... Дубликат кольца с того мода продублировал и прицепил к скрипту.

 

Scriptname RL_ReEquipAll extends ObjectReference

 

Armor property DummyRing auto

 

Event OnTriggerEnter(ObjectReference akActionRef)

if(akActionRef != Game.GetPlayer())
  actor who = akActionRef as actor
  who.AddItem(DummyRing, abSilent = true)
  who.EquipItem(DummyRing, abSilent = true)
  who.UnEquipItem(DummyRing, abSilent = true)
  who.RemoveItem(DummyRing, abSilent = true)
endif

EndEvent

 

В том моде стражники(мной созданные стражники, с моими пакетами) одеваются - у меня нет... может ли влиять Exterier и Interier?

 

зы.. оба тригера(с этим скриптом) находятся в Exteriors, а у меня в Interiors. В код вставил "Проверку", "Проверка" появляется, в левом верхнем углу...

Сразу второй вопрос в тему... хочется чтобы и ГГ одевался обратно автоматом...Предполагаю, нужно получить id одежды при вхождении в зону, сохранить ее в массиве и потом опять ее одеть по id  из массива... Это возможно сделать средствами кодинга?


Сообщение отредактировал budu200: 10 февраля 2020 - 13:50


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

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

Отправлено

В том моде стражники одеваются у меня нет... может ли влиять Exterier и Interier?

Нет, не может. Вернее, не должен.

Скрипт странный, конечно. Добавляет, экипирует, и удаляет какое-то кольцо. Я так понимаю, чтоб перезапустить ванильный ИИ экипировки предметов - чтоб он сам предметы из инвентаря экипировал после такого "пенделя" (кстати, очень изящное решение, если это так).

Но вот почему ивент стоит "OnTriggerEnter" - когда персонаж входит в зону триггера? Не логичнее было бы использовать "OnTriggerLeave" - когда персонаж из зоны выходит?



#607 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

Ну... после такого "пенделя" должны одеть Outfit, и одевают... Но разница только в Ext и Int. у меня Int тестовая лока. Где-то читал, нужно перегрузить локу в Int тогда произойдет смена на Outfit... Типа с этой проблемой трудно бороться(с Outfitom) 

А по раздеванию и одеванию ГГ есть мысли?

Зы... там 2 тригера общий на зону - раздевания NPC, второй на выходе одевает.... фурнитура(скрипт) в купальне просто раздевает только ГГ.

 

для общего понимания на раздевание ГГ и NPC...

 

Scriptname RL_SaunaSitUnequip extends ObjectReference 

Import Game
Import Utility
Import Debug

ObjectReference property SaunaDoor01 auto

String strSaunaRelax = "You begin to feel relaxed as sauna restores your body and soul"

Event OnActivate(ObjectReference akActionRef)

if(akActionRef == Game.GetPlayer())
  actor who = akActionRef as actor
  who.unequipall()
  Notification(strSaunaRelax)
endif

EndEvent

 

;-----------

 

Scriptname RL_SaunaEnterUnequip extends ObjectReference 

Event OnTriggerEnter(ObjectReference akActionRef)

if(akActionRef != Game.GetPlayer())
  actor who = akActionRef as actor
  who.unequipall()
endif

EndEvent


Сообщение отредактировал budu200: 10 февраля 2020 - 14:45


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

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

Отправлено

Где-то читал, нужно перегрузить локу в Int тогда произойдет смена на Outfit...

Вот такого я нигде не видел. Но я много чего не видел, так что мало ли =)

 

А по раздеванию и одеванию ГГ есть мысли?

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

 

Я вижу так: при входе в купальню на ГГ вешается скрытый маг.эффект, который висит, пока ГГ в купальне.

В нем на ивенте OnEffectStart команда на unequipall (ну или снятие вещей по слотам), и ивент OnObjectUnequipped. В этом ивенте мы можем определять, какая вещь снята была, и соответственно в какой-нибудь список ее внести (внутри скрипта в список переменных, в массив, в формлист - как сделаешь).

По выходу из триггера эффект снимается, и на ивенте OnEffectFinish все, что было снято, экипирует назад.

 

Можно еще через это вот по слотам пройтись, посмотреть что там экипировано, и уже конкретные вещи снять.



#609 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

упс.. :sad:


Сообщение отредактировал budu200: 12 февраля 2020 - 03:56


#610 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

Можно еще через это вот по слотам пройтись, посмотреть что там экипировано, и уже конкретные вещи снять.

Использовал слоты и FormList, ГГ нормально раздевается и одевается... СПС



#611 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

HasKeywordInFormList - Form : в 4 фаллауте есть... А как в тессе есть что нить аналогичное?



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

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

Отправлено

HasKeywordInFormList - Form : в 4 фаллауте есть... А как в тессе есть что нить аналогичное?

Нет вроде.

Но можно прогнать формлист целиком по циклу и в каждой записи проверить наличие кейворда.



#613 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

Нет вроде.

Но можно прогнать формлист целиком по циклу и в каждой записи проверить наличие кейворда.

Чет не соображу через какую функцию выдернуть Keyword из FormList, FLST.GetAt(iIndex) получает Form...keywordow не видит.... 



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

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

Отправлено

Чет не соображу через какую функцию выдернуть Keyword из FormList, FLST.GetAt(iIndex) получает Form...keywordow не видит.... 

Ну. Форму ты получил. Потом юзаешь на нее HasKeyword. Если хотя бы раз будет True - значит, в формлисте есть что-то с этим кейвордом.



#615 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

Ну. Форму ты получил. Потом юзаешь на нее HasKeyword. Если хотя бы раз будет True - значит, в формлисте есть что-то с этим кейвордом.

Ок.. попробую



#616 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

Подскажите...

 

notification("Необходимо : " + Item1.getName() + " " +CountItem1 + " шт") ; в этой строчке русский текст кракозябрами
   endIf
  else
   notification("Приходите с " + mHourToEnable as int  + " до " + mHourToDisable as int) ; в этой строчке норма пишет...

 

Не соображу почему? :sad:

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

Не победил..  Судя по всему какой то внутренний глюк... Печалька...


Сообщение отредактировал budu200: 26 февраля 2020 - 13:35


#617 Ссылка на это сообщение CISCO.:i:..:i:.

CISCO.:i:..:i:.
  • Талант
  • 257 сообщений
  •  

Отправлено

Доброго времени суток! Подскажите почему не работает

тык
 вешаю это на активатор (кнопку) - анимация и Enable Disable работают а блокировка на нажатие кнопки не срабатывает.


Сообщение отредактировал CISCO.:i:..:i:.: 21 апреля 2020 - 00:05


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

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

Отправлено

вешаю это на активатор (кнопку) - анимация и Enable Disable работают а блокировка на нажатие кнопки не срабатывает.

 

Прочитай примечания. Там сложно с этой штукой.

 

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

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



#619 Ссылка на это сообщение werr

werr
  • больной на всю голову

  • 1 733 сообщений
  •    

Отправлено

Доброго времени суток! Подскажите почему не работает


BlockActivation - тут немного не то. Когда хочешь реализовывать блокировку от повторных нажатий "не вовремя", нужно это делать через стейты. Ниже переделал твой скрипт. 5.5 секунд взято из него же. По-хорошему, смотришь на время воспроизведения анимации движения рычага и это время и берешь.
 
Bool property isInPullPosition = true auto
ObjectReference property MyDoor auto
ObjectReference property MyActivator auto


auto STATE INITIAL
	Event OnActivate(ObjectReference triggerRef)
		if isInPullPosition
			isInPullPosition = false
			MyDoor.PlayGamebryoAnimation("Forward", "true")
			MyActivator.Enable()
			GotoState("BusyAnimating")
		else
			isInPullPosition = true
			MyDoor.PlayGamebryoAnimation("Backward", "true")
			MyActivator.Disable()
			GotoState("BusyAnimating")
		endif
	endevent
ENDSTATE

STATE BusyAnimating
	Event OnBeginState()
		Utility.Wait(5.5)
		GotoState("INITIAL")
	endevent
ENDSTATE


#620 Ссылка на это сообщение CISCO.:i:..:i:.

CISCO.:i:..:i:.
  • Талант
  • 257 сообщений
  •  

Отправлено

Прочитай примечания. Там сложно с этой штукой.

Если бы я хорошо понимал на английском - так нет - учится было лень в своё время.

 

нужно это делать через стейты.

Я даже слова такого не знаю)

 

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

Именно от туда и взялось это время - Большое спасибо за скрипт - как проверю отпишусь.



#621 Ссылка на это сообщение CISCO.:i:..:i:.

CISCO.:i:..:i:.
  • Талант
  • 257 сообщений
  •  

Отправлено

Ниже переделал твой скрипт

Ещё раз большое спасибо! Проверил скрипт в игре - всё работает!







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

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

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