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

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

Опубликовано
04.10.2018 19:46:09, stanislavd сказал(-а):
не получается... не хочет он видеть смерть нпс((  

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

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

  • 2 недели спустя...
  • Ответов 840
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано (изменено)

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

Скрипт
Scriptname _0000_HMD_TEST11111111111111111111111 extends ObjectReference

quest property Ques_Name auto

ObjectReference property Object_1 auto

sound property My_sound auto

function OnTriggerEnter(ObjectReference akActionRef)

if akActionRef == game.GetPlayer() as ObjectReference
self.QuestItems()
endIf
endFunction

function QuestItems()

if Ques_Name.IsCompleted() && Object_1.IsDisabled()
Object_1.enable()
My_sound.Play(game.GetPlayer() as ObjectReference)
debug.notification("Портал разблокирован.")
utility.Wait(1 as Float)
endIf
endFunction

function OnCellLoad()

debug.notification("Добро пожаловать!")
endFunction

 

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

Изменено пользователем CISCO.:i:..:i:.
Опубликовано (изменено)
18.10.2018 13:39:22, CISCO.:i:..:i:. сказал(-а):
Прошу подскажите мне идентификаторы этого квеста ну вот к примеру  квест боэтии когда ты взял доспехи с трупа считается завершенным DA02

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

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

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

 

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

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

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

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

Изменено пользователем Azazellz
Опубликовано
18.10.2018 14:05:28, Azazellz сказал(-а):
Первая и последняя функции должны быть эвентами, по идее.

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

 

18.10.2018 14:05:28, Azazellz сказал(-а):

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

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

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

Опубликовано
18.10.2018 13:39:22, CISCO.:i:..:i:. сказал(-а):

 


Спойлер
Scriptname XXscript extends ObjectReference

Actor property PlayerREF auto				;player s reference
Quest property TG01 auto				;quest id
Sound property SFXtoPlay auto				;sound to play
ObjectReference property xMarker01REF auto		;marker to enable
Bool property DoOnce = true auto			;true by default


	Event OnTriggerEnter(ObjectReference akActionRef)
		if akActionRef == PlayerREF && TG01.GetStageDone(200)
			xMarker01REF.Enable()
			SFXtoPlay.Play(PlayerREF)
			
			if DoOnce
				Disable()
				Delete()
			endif
		endif
	EndEvent



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() бесполезна, поскольку после нее ничего не происходит.

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

 

 

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

Спасибо огромное - очень подробно пояснили - за ссылку отдельно спасибо. Хорошо что многие не проходят мимо со словами - ещё один новичок парит тут мозги не всякими глупостями - а пытаются разъяснить  этому бедолаге как нужно сделать и с чего начать.

  • 3 недели спустя...
Опубликовано (изменено)

Приветствую всех. Новичку сложно найти из горы функций нужную. Надеюсь поможете хоть с чем-то. Название функции/пример или просто направьте меня в нужное русло.
 

Функции:

1. Телепорт персонажа в рандомную точку на карте (если это не возможно, то хотя бы в рандомный город)
2. Оставить персонажу 1 хп (не общее количество, а просто 1 из 100, например)

3. Сменить погоду и время суток

4. Создать взрывы рядом с персонажем (чтобы они охватывали среднюю область около персонажа)

5. Ускорить или замедлить персонажа на время (например, на 1 минуту)

6. Наложить баф или дебаф на время

7. Убрать возможность управление персонажем на время или сделать инверсию мышки/управления

8. Добавить уровень преступности

9. Сломать (убрать прочность) экипированного оружия и брони

Изменено пользователем BornToNight
Опубликовано (изменено)

1. https://www.creationkit.com/index.php?title=RandomInt_-_Utility потом https://www.creationkit.com/index.php?title=CenterOnCell_-_Debug или https://www.creationkit.com/index.php?title=MoveTo_-_ObjectReference

2. https://www.creationkit.com/index.php?title=GetActorValue_-_Actor потом https://www.creationkit.com/index.php?title=DamageActorValue_-_Actor

3. Время https://www.creationkit.com/index.php?title=SetValueInt_-_GlobalVariable. Погода https://www.creationkit.com/index.php?title=SetActive_-_Weather

4. https://www.creationkit.com/index.php?title=PlaceAtMe_(Papyrus) или https://www.creationkit.com/index.php?title=Cast_-_Spell

5. Скрипт не нужен. Используй ванильные магические эффекты. Накладывай через https://www.creationkit.com/index.php?title=Cast_-_Spell

6. Тоже самое. https://www.creationkit.com/index.php?title=Cast_-_Spell

7. https://www.creationkit.com/index.php?title=DisablePlayerControls_-_Game и https://www.creationkit.com/index.php?title=EnablePlayerControls_-_Game

8. https://www.creationkit.com/index.php?title=IncrementStat_-_Game и https://www.creationkit.com/index.php?title=QueryStat_-_Game

9. Нужен СКСЕ. https://www.creationkit.com/index.php?title=WornObject_Script

 

И вообще, вот тебе страница, изучай.

https://www.creationkit.com/index.php?title=Category:Script_Objects

Изменено пользователем Azazellz
  • Нравится 1
Опубликовано (изменено)

Не могу понять почему срабатывают только NUM1, NUM2 и NUM3. Скрипт предназначен для того, чтобы при нажатии определённой кнопки вызывалась функция. Всё идентично, но срабатывает только три кнопки.

Скрипт
Scriptname script extends Quest


MiscObject property Gold001 auto
MiscObject Property golda Auto

;other properties

float fTimeForExecution
;other variables

;------------STATES-----------------
;Auto STATE Initial
Event OnInIt()
RegisterKeyboard()
GoToState("KeyInputState")
EndEvent
;ENDSTATE

STATE KeyInputState
Event OnKeyDown(Int iKey)


if iKey == 79 ;NUM1 ()
MacrosFunction01()

elseif iKey == 80 ;NUM2 ()
MacrosFunction02()

elseif iKey == 81 ;NUM3 ()
MacrosFunction03()

elseif iKey == 75 ;NUM4 ()
MacrosFunction04()

elseif iKey == 76 ;NUM5 ()
MacrosFunction05()

elseif iKey == 77 ;NUM6 ()
MacrosFunction06()

elseif iKey == 71 ;NUM7 ()
MacrosFunction07()

elseif iKey == 72 ;NUM8 (n)
MacrosFunction08()

endif

GoToState("BusyRunning")
EndEvent
ENDSTATE

STATE BusyRunning
Event OnBeginState()
Utility.Wait(fTimeForExecution)

GoToState("KeyInputState")
EndEvent
ENDSTATE

;------------FUNCTIONS-----------------
Function RegisterKeyboard()
RegisterForKey(71)
RegisterForKey(72)
RegisterForKey(75)
RegisterForKey(76)
RegisterForKey(77)
RegisterForKey(79)
RegisterForKey(80)
RegisterForKey(81)
endfunction

Function MacrosFunction01()
Game.GetPlayer().PlaceAtMe(Game.GetForm(0x000753ce),1)
endfunction

Function MacrosFunction02()
Game.GetPlayer().AddItem(golda, 100)
endfunction

Function MacrosFunction03()
Game.GetPlayer().PlaceAtMe(Game.GetForm(0x0002123f),1)
endfunction

Function MacrosFunction04()
Game.GetPlayer().PlaceAtMe(Game.GetForm(0x00023484),1)
endfunction

Function MacrosFunction05()
Game.GetPlayer().PlaceAtMe(Game.GetForm(0x000481a0),8)
endfunction
etc...

Изменено пользователем BornToNight
Опубликовано
07.11.2018 12:23:32, BornToNight сказал(-а):

Не могу понять почему срабатывают только NUM1, NUM2 и NUM3.

Написано-то нормально. Попробуй вместо неработающих NUM-ов поставить что-нибудь с основной клавиатуры (G,H,Y,U и т.п.). И посмотри, что будет. Возможно (я когда-то краем глаза читал), не все кнопки можно забиндить. Если же все и так работать не будет, то имеет смысл убедиться в правильности указанных FORM. Я бы на время тестирования еще туда debug.notification(....) какой-нибудь вставил. На случай если в FORM ошибка, и PlaceAtMe() возвращает NONE, но при этом сама функция-макрос срабатывает. Видно будет.

  • Нравится 1
Опубликовано (изменено)
08.11.2018 08:52:31, werr сказал(-а):

Написано-то нормально. Попробуй вместо неработающих NUM-ов поставить что-нибудь с основной клавиатуры (G,H,Y,U и т.п.). И посмотри, что будет. Возможно (я когда-то краем глаза читал), не все кнопки можно забиндить. Если же все и так работать не будет, то имеет смысл убедиться в правильности указанных FORM. Я бы на время тестирования еще туда debug.notification(....) какой-нибудь вставил. На случай если в FORM ошибка, и PlaceAtMe() возвращает NONE, но при этом сама функция-макрос срабатывает. Видно будет.

Написано нормально, потому что это ваш код :D. Вообще, я уже много что проверил. Проверял через debug.notification(), всё стопорится именно на проверке ikey == 71. Ибо все функции я проверил на NUM1,2,3 и они работают, дело не в них. Также, пытался забиндить на другую кнопку (U), тоже не получилось. Вставлял "Debug.notification(ikey)" в "Event OnKeyDown(Int iKey)"  и выводились только те номера кнопок, которые работают (т.е. NUM1,2,3). Щас попробую ещё другие кнопки побиндить.

UPD: Попробовал F1 и J - не работает

Изменено пользователем BornToNight
Опубликовано

Вообще, в том же Позиционере все нумы работют.

Но там они не напрямую заданы, их можно перебиндить.

Попробуй не напрямую их прописывать, а через int проперти.

Может, поможет.

Опубликовано
08.11.2018 11:19:50, Azazellz сказал(-а):

Вообще, в том же Позиционере все нумы работют.

Но там они не напрямую заданы, их можно перебиндить.

Попробуй не напрямую их прописывать, а через int проперти.

Может, поможет.

Не-а. Беда :(. Есть ещё идеи?

Опубликовано

Короче, создал новый квест, новый скрипт и всё стало работать. Причину так я и не понял. Всем спасибо, кто пытался помочь с "проблемой". Как говорится, аномалия кодинга Kappa

Опубликовано (изменено)
08.11.2018 11:51:30, BornToNight сказал(-а):

Короче, создал новый квест, новый скрипт и всё стало работать. Причину так я и не понял. Всем спасибо, кто пытался помочь с "проблемой". Как говорится, аномалия кодинга Kappa

Cкорее уж кто-то просто не до конца понимает, как persistent-скрипты в Скае работают =)

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

Надо либо сделать еще один инстанс с другим скриптом - либо удалить из сейва инстанс текущий (через сейв-эдитор или путем сохранения-удаления мода-сохранения-очистки сейва).

Вот скрипты, прикрепленные к магическим эффектам, которые не постоянно на игроке висят - можно править и без чистых сейвов.

Изменено пользователем Azazellz
Опубликовано
08.11.2018 12:06:13, Azazellz сказал(-а):

Cкорее уж кто-то просто не до конца понимает, как persistent-скрипты в Скае работают =)

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

Надо либо сделать еще один инстанс с другим скриптом - либо удалить из сейва инстанс текущий (через сейв-эдитор или путем сохранения-удаления мода-сохранения-очистки сейва).

Вот скрипты, прикрепленные к магическим эффектам, которые не постоянно на игроке висят - можно править и без чистых сейвов.

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

  • 2 недели спустя...
Опубликовано

Хожу с Сераной, изменил ей внешность но есть проблема с ее анимациями. В разговоре она ведет себя как американский негр – реппер. Переминается с ноги на ногуб  делает специфические движения руками и т.д. Как убрать/сменить эти анимации на обычные lдля женщин НПС? Где они находятся?
И еще. Можно ли как то убрать радостную улыбку с ее физиономии?

  • 1 месяц спустя...
Опубликовано

Доброго времени суток! Товарищи, только-только начал заниматься скриптами, есть цель сотворить книжку, которая при чтении будет выкидывать игрока на определенную локацию. Книжка есть, локация тоже. А вот скрипт на книжке не работает. Может кто поможет нубу?><  Заранее благодарствие

Вот оно:

scriptName a1bktp extends ObjectReference

objectreference property aaaameltdown auto
Actor Player
function OnRead()

	utility.Wait(1.50000)
	game.FadeOutGame(false, true, 2.00000, 1.00000)
	Player.MoveTo(aaaameltdown, 0.000000, 0.000000, 0.000000, true)
	game.FastTravel(aaaameltdown)
endFunction
Опубликовано

Вместо функции - ивент.

https://www.creationkit.com/index.php?title=OnRead_-_ObjectReference

Фасттревел не нужен, если ты MoveTo сделал.

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

 

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

Опубликовано
30.12.2018 10:35:21, Azazellz сказал(-а):

Вместо функции - ивент.

https://www.creationkit.com/index.php?title=OnRead_-_ObjectReference

Фасттревел не нужен, если ты MoveTo сделал.

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

 

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

Большое спасибо! Действительно, стоило начать с очевидного, но как-то не сразу вспомнил про черные книги

Буду учить все дальше

Спасибо еще раз

  • 1 месяц спустя...
Опубликовано

У меня вопрос почему скрипт не работает? Делаю дом в нём будет несколько телепортов но они не должны быть видны пока не будут выполнены определённые квесты по сюжету игры. Сам скрипт вешаю на Хмаркер - скрипт скомпилировался - но не работает(! То есть я хочу что бы при выполненном квесте при заходе на локацию появлялись нужные мне объекты (телепорты) и появлялось окно с оповещением. 

 

Скрипт
quest property Quest_Name auto

message property myMessage auto

ObjectReference property Object_Enable auto

ObjectReference property Object_Disable auto

GlobalVariable property GlobalInt_LoadOnce auto


Event OnCellLoad()

if Quest_Name.IsCompleted() && GlobalInt_LoadOnce.GetValueInt()==0

Object_Enable.enable()
Object_Disable.disable()
myMessage.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
GlobalInt_LoadOnce.SetValueInt(1)

endIf

endEvent
Опубликовано
15.02.2019 22:17:56, CISCO.:i:..:i:. сказал(-а):

У меня вопрос


Спойлер

auto STATE Initial
	Event OnCellAttach()
		if Quest_Name.IsCompleted()
			Object_Enable.enable()
			Object_Disable.disable()
			myMessage.Show()
			GoToState("DONE")
		endif
	EndEvent
ENDSTATE

STATE DONE
	Event OnBeginState()
		Delete()
	EndEvent
ENDSTATE

Гораздо уместнее использовать OnCellAttach() вместо OnCellLoad(). Вдобавок, убедись, что этот квест вообще помечается игрой как Completed, возможно разумнее проверять по GetStageDone(). Заполнение properties проверь.
Опубликовано
16.02.2019 15:52:00, Azazellz сказал(-а):

Я вообще сомневаюсь, что маркер ивент OnCellLoad получает.
Имхо, куда нажнее это вот "включение телепортов" в сам квест встроить.

Там помимо включения телепортов ещё же месседж показывается.

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

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

Создать аккаунт

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

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

Войти

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

Войти
×
×
  • Создать...