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


Фотография

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

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

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

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

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


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

Отправлено

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

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

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

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



 




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

#462 Ссылка на это сообщение BornToNight

BornToNight
  • Новенький
  • 11 сообщений

Отправлено

Я накидал по-быстрому рабочий шаблон с комментариями:
[spoiler]

Спасиииииииибо огромное! Очень вам благодарен. Код отличный и понятный. Удалил State между OnInit(), т.к. компилятор ругался.


Сообщение отредактировал BornToNight: 01 октября 2018 - 11:27


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

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

Отправлено

Доброго времени суток. подскажите почему не работает - почему объект_3 не появляется и не исчезает.

Скрипт



#464 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

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

Отправлено

Доброго времени суток. подскажите почему не работает - почему объект_3 не появляется и не исчезает.

Скрипт

А все остальные объекты делают то, что нужно? Попробуй использовать конструкцию IsDisabled вместо Object_1 == Disable(true)



#465 Ссылка на это сообщение Vitalyudin

Vitalyudin
  • Existential Void Guardian


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

Отправлено

Доброго времени суток. подскажите почему не работает - почему объект_3 не появляется и не исчезает.

Скрипт

Замени функцию на ивент. Нет события - нет срабатывания.

Ну, и советом выше тоже не пренебрегай.



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

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

Отправлено

А все остальные объекты делают то, что нужно? Попробуй использовать конструкцию IsDisabled вместо Object_1 == Disable(true)

 

Замени функцию на ивент. Нет события - нет срабатывания.

Ну, и советом выше тоже не пренебрегай.

Спасибо за идеи - но ни при каком раскладе не пашет. может я не правильно пояснил изначально. Object_3 - должен менять своё положение Enable/Disable в зависимости от положения Object_2 и Object_1 (которые в свою очередь меняют своё положение Enable/Disable путём активации другого скрипта - там всё нормально работает - Object_2 и Object_1 появляются и исчезают при выполненных условиях)

Скрипт


Сообщение отредактировал CISCO.:i:..:i:.: 01 октября 2018 - 23:48


#467 Ссылка на это сообщение Vitalyudin

Vitalyudin
  • Existential Void Guardian


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

Отправлено

Спасибо за идеи - но ни при каком раскладе не пашет.

Скрипт

Приведи скрипт полностью, на какой объект ты его крепишь?



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

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

Отправлено

Приведи скрипт полностью, на какой объект ты его крепишь?

так это и есть весь скрипт - креплю его на сторонний активатор - который прячу под землёй.



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

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

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

Отправлено

Спасибо за идеи - но ни при каком раскладе не пашет. может я не правильно пояснил изначально. Object_3 - должен менять своё положение Enable/Disable в зависимости от положения Object_2 и Object_1 (которые в свою очередь меняют своё положение Enable/Disable путём активации другого скрипта - там всё нормально работает - Object_2 и Object_1 появляются и исчезают при выполненных условиях)

Зачем тебе OnLoad event?? Куда разумнее кинуть в мир Xmarker и на него скрипт с OnCellAttach ивентом. Ну это так, просто сходу "что не так". Если предположить, что ты ждешь срабатывания именно при прогулке по миру (пытаюсь угадать идею твоего кода). В таком случае флаг true в командах Enable(), Disable() теряет какой-либо смысл.

Не понял, что там должно менять положение? Двигать предмет на глазах у игрока - это вообще не к Enable/Disable(). Просто не так понял, наверное.

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

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

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

Отправлено


Мне кажется, ты сам не до конца понимаешь, что пытаешься сделать

Не совсем так - точнее совсем не так. 

 

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

а вот тут вы 100 % правы. Я попытаюсь объяснить чего я хочу добиться - надеюсь у меня это получится не слишком витиевато.

существуют два меча Душегуб и призрачный клинок (Object_1 & Object_2) - я для них сделал нечто типа пьедестала на который эти мечи можно положить с помощью скрипта

Скрипт
 

 

И мне нужно что бы после того как оба меча душегуб и призрачный клинок (Object_1 & Object_2) будут "положены" на пьедестал - появлялся третий меч - ранее не участвующий в процессе Меч Даэдра (Object_3)  - по мимо этого мне необходимо что бы эффект был не единичным а повторялся бесконечно то есть - если убрать с пьедестала один из мечей (Object_1 или Object_2) - то и Меч Даэдра (Object_3) исчезал (Disable). Если же снова оба меча (Object_1 & Object_2) окажутся на пьедестале - то Меч Даэдра (Object_3) снова появиться.  Проще говоря мне нужно что бы Меч Даэдра (Object_3) появлялся лишь тогда - когда на пьедестал будут положены два других меча (Object_1 & Object_2) Если убрать один из мечей (Object_1 или Object_2) - тогда Меч Даэдра (Object_3) должен исчезнуть и появиться лишь тогда когда оба меча будут на пьедестале. Вот собственно от этого и родился этот несуразный скрипт.

Скрипт



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

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

Отправлено

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

По-моему мы что-то похожее тут уже обсуждали, нет?

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

Появление третьего объекта можно прописывать непосредственно в скрипте с установкой первых двух.



#472 Ссылка на это сообщение stanislavd

stanislavd
  • Авантюрист
  • 118 сообщений

Отправлено

что не так?

Scriptname aaaaaVtoroyKvestDrevnegoProhoda extends ObjectReference  

int paukdeadA = 0
int paukdeadB = 0

Actor Property Pauk1 Auto
Actor Property Pauk2 Auto

ObjectReference Property startTrigger Auto

bool isComplete = false

event OnActivate (objectReference TriggerRef)
	if (isComplete == false)
		DeadPaukPatternA()
		DeadPaukPatternB()
	endif
endevent

function puzStart()
	startTrigger.Disable()
endFunction

function DeadPaukPatternA()
		if (Pauk1.isDead()) 
			Debug.MessageBox("УПС!")
			paukdeadA += 1
		else
			Debug.MessageBox("ПАУЧОК!")
		endif
endFunction

function DeadPaukPatternB()
		if (Pauk2.isDead()) 
			Debug.MessageBox("УПС2!")
			paukdeadB += 1
		else
			Debug.MessageBox("ПАУЧОК2!")
		endif
endFunction

нужно чтобы выдавал когда жив и когда мёртв паук, а он только когда жив пишет и всё



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

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

Отправлено

Попробуй вместо обычного else использовать elseif

Типа

if (Pauk2.isDead()) 
			Debug.MessageBox("УПС2!")
			paukdeadB += 1
elseif !(Pauk2.isDead()) 
			Debug.MessageBox("ПАУЧОК2!")
endif


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

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

Отправлено

По-моему мы что-то похожее тут уже обсуждали, нет?

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

Появление третьего объекта можно прописывать непосредственно в скрипте с установкой первых двух.

Да я Вас услышал - и тогда а вот теперь дошло - пойду ваять.


Сообщение отредактировал CISCO.:i:..:i:.: 03 октября 2018 - 22:40


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

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

Отправлено

Появление третьего объекта можно прописывать непосредственно в скрипте с установкой первых двух.

Да что бы я ещё раз тебя не послушал и пошел изобретать велосипед - да не в жизни)))) Просто скопировал то что ты писал ранее и вставил в скрипт и всё заработало.

 

Скрипт



#476 Ссылка на это сообщение stanislavd

stanislavd
  • Авантюрист
  • 118 сообщений

Отправлено

 

Попробуй вместо обычного else использовать elseif

Типа

if (Pauk2.isDead()) 
			Debug.MessageBox("УПС2!")
			paukdeadB += 1
elseif !(Pauk2.isDead()) 
			Debug.MessageBox("ПАУЧОК2!")
endif

не получается... не хочет он видеть смерть нпс((  



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

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

Отправлено

не получается... не хочет он видеть смерть нпс((  

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

Попробуй инфу о смерти пауков в GlobalVariable соответствующей командой писать, и оттуда же ее собирать.



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

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

Отправлено

Доброго времени суток. Пишу скрипт - столкнулся с банальным незнанием - точнее отсутствием практики создания квестов с моей стороны. Дело в том что мне нужно сделать так что бы при прохождении ГГ триггера происходило появление объекта - но только в том случае если игрок состоит в гильдии воров. Решил привязать всё это к квесту - но так и не нашел этого самого квеста.

Скрипт

 

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


Сообщение отредактировал CISCO.:i:..:i:.: 18 октября 2018 - 14:44


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

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

Отправлено

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

У гильдии воров с TG в названии наверное будет, или что-то похожее.

Идешь на вики, смотришь линейку квестов. Идешь в СК, ищещь квест по названию.

А от названия уже и до ИДшника недалеко.

 

И почему у тебя опять function вместо Event?

Функции - это, условно говоря, куски кода, которые можно вызывать через название. Эвенты - это события в игре.

Что-то у меня есть сомнение, что триггер с таким вот скриптом вообще сработает.

Первая и последняя функции должны быть эвентами, по идее.


Сообщение отредактировал Azazellz: 18 октября 2018 - 15:06


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

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

Отправлено

Первая и последняя функции должны быть эвентами, по идее.

Спасибо учту - как всё выясню отпишусь.

 

Идешь на вики, смотришь линейку квестов. Идешь в СК, ищещь квест по названию.

А от названия уже и до ИДшника недалеко.

А вот это напоминает выражение - всё гениальное просто. 



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

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

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

Отправлено

 




1. Советую тебе почитать, что такое функции и ивенты, и как это связано. Целый учебник про папирус уже давно есть в сети (ссылка).

 

2. Олсо, если ты вызываешь функцию, описанную с самом же скрипте, то не обязательно просить скрипт обращаться к самому себе, он и так это поймет.

QuestItems()

вместо

self.QuestItems()

3. Также необязательно приводить типы (зачем???) к ObjectReference:

if akActionRef == game.GetPlayer() as ObjectReference

и здесь

My_sound.Play(game.GetPlayer() as ObjectReference

Игра и так способна воспринять актера как референс в мире. Примерно как и здесь

utility.Wait(1 as Float)

Чем ты руководствуешься, когда ставишь подобное? Зачем? Вообще всегда задавай себе вопрос "Зачем?" — это поможет заставить себя думать. В программировании должна логика действий прослеживаться. А в таком виде эти приписки больше напоминают ритуальные заклятья. Я к тому, что во-первых, в функции Wait() аргумент и так является типа Float; а во-вторых, тип Int и без дополнительных телодвижений приводится системой к Float.

Utility.Wait(1.0)

или

Utility.Wait(1)

тоже будет верно. Однако, в том виде, как это используется у тебя, команда Wait() бесполезна, поскольку после нее ничего не происходит.







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

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

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