Урок на Bethesda Основни скриптове в Quests
Лични инструменти
Пространства от имена
Съдържание
Този урок ще ви покаже как да използвате скриптове, за да преминете играч през куестова линия въз основа на техните действия. В предишния урок показахме как да използвате скрипт в диалогови прозорци, но този ще ви покаже как да прикачите персонализирани скриптове към актьори, както и към игрови обекти.
- Основни скриптови конструкции и как работят, както и прикачването им към обекти в Creation Engine
- Как да реагираме на събития в нов скриптов език
(За още по-просто въведение в скриптовете вижте урока „Hello, World“.)
Скриптовият език, използван в Creation Kit, се нарича Papyrus (точно като материала, върху който са отпечатани свитъците). Скриптовете Papyrus са обикновени текстови файлове, които се превръщат в байт код, който играта изпълнява, докато работи.
Първото нещо, което ще направим, е да добавим скрипт към крадеца, така че когато бъде убит, мисията да се актуализира правилно.
Отворете актьора GSQThief, който създадохме по-рано. Нека се обърнем към секцията „Сценарии на папирус“ на прозореца на актьора.
Кликнете върху бутона "Добавяне". Това извежда списък със скриптове, които може би бихме могли да добавим към този актьор. Нека обаче напишем нов скрипт, щракнете двукратно върху „[Нов скрипт]“ в горната част на списъка.
Това ще изведе друг прозорец, където можете да въведете името на вашия скрипт. Наименувайте го „GSQThiefScript“ и щракнете върху „OK“.
Вашият сценарий вече е добавен към актьора. Но, както може да очаквате, все още не прави нищо, но това е засега.
Щракнете два пъти върху името на скрипт, за да изведете прозореца със свойства за избрания скрипт. Самите скриптове не саса наясно с всякакви обекти в играта, различни от този, към който са прикрепени. Използваме свойства, за да свързваме обекти заедно, така че те да могат да си влияят един на друг. В нашия случай искаме да настроим стъпката на мисията GSQ01 на 20, когато крадецът бъде убит, така че трябва да кажем на скрипта върху коя мисия работим.
Кликнете върху бутона „Добавяне на собственост“ в долния ляв ъгъл на този прозорец. Това е мястото, където ще създадем имота. В полето Type или изберете „Quest“ от падащия списък, или започнете да въвеждате думата „Quest“ на клавиатурата. Поставете „TutorialQuest“ в полето Име, оставете всичко останало празно и щракнете върху OK.
Сега казахме на скрипта, че ще обърне внимание на „TutorialQuest“, но скриптът не знае какво представлява мисията. В списъка щракнете върху свойството, което току-що направихме, и щракнете върху „Редактиране на стойност“ от дясната страна на прозореца. Ще се появи ново падащо меню, изброяващо всички куестове в играта. Изберете "GSQ01" от това меню и щракнете върху "OK".
Писане на сценарий
Под този текст копирайте и поставете следния кодов фрагмент.
Отново игнорирайте какво означава SetObjectiveDisplayed(20).
Ако сте доста запознати с програмирането или писането на скриптове, тогава ще разберете какво прави кодът, който току-що сте поставили, не се страхувайте да пропуснете това, което идва след „Свързване на скрипт към амулет“. За всички останали ще прегледаме кода ред по ред.
- Събитие OnDeath (Актьор убиец)
- Този низ показва, че сценарият ще даде отговор, когато актьорът умре. Когато актьор умре, играта ще започне да изпълнява кода от тази точка. Играта пише в променливата "killer" кой е убил този актьор, но тази част няма значение за нас в момента.
Ако виждате нещо различно тук, значи сте написали нещо грешно. Опитай пак!
Когато сте готови, затворете прозореца Редактиране на скрипт и прозореца Актьор и запазете вашия плъгин. Сега е време да напишете самия амулет.
Свързване на скрипт към амулет
Отворете елемента "GSQAmulet", който създадохме в предишния урок. В Armor acne секцията Scripts е долу вдясно.
Създайте нов скрипт, както направихме преди, и го наречете GSQAmuletScript. Дайте му свойство Quest, но за да видите спретнатия трик, този път го наименувайте „GSQ01“ вместо „TutorialQuest“.
Той автоматично ще зададе стойността на свойството вместо вас, тъй като сте дали на свойството име, което съответства на съществуващите идентификатори. Ако декларирате много имоти, този трик може да ви спести много време.
Отворете скрипта, сега ще добавим събитие към него. Амулетът не може да умре (очевидно), но искаме да знаем кога играчът го вземе. Събитието в нашия скрипт ще изглежда така:
За пореден път не навлизайте в подробности на написаното тук. Това ще бъде обяснено в раздела за целите.
Ето няколко неща, които трябва да отбележите за този скрипт:
- Декларираните параметри ( newContainer и oldContainer ) се попълват от играта, когато тя каже на този скрипт да обработи събитието.
- Тъй като събитиетоOnContainerChanged ще се задейства всеки път, когато този обект промени собствеността си, така че трябва да сме сигурни, че задаваме стъпката на мисията само когато играчът вземе амулета, поради което се използва блокът if / endif.
- Game.GetPlayer() е удобен начин за получаване на препратки към играча, без да се налага да задавате свойство, а newContainer беше попълнен от двигателя на играта, когато събитието се задейства, така че можем да направим сравнение на втория ред, за да сме сигурни, че елементът се движи към играча.
- Поради начина, по който е написан скриптът, командата SetStage ще се извиква всеки път, когато играчът вземе амулет. Това не е така, защото всеки етап от търсенето може да се случи само веднъж - извикването на командата SetStage(30) няма ефект, след като тя вече е била извикана за първи път.
Е, този скрипт е готов. Затворете прозорците на скрипта и бронята и запазете вашия плъгин.
Сега можете да играете и да преминете през мисията от началото до края, да наблюдавате промяната на етапа на мисията, като въведете SQV в конзолата.
Играчите, които не могат да използват конзолата, ще научат как да получат информация за мисии в следващата глава.