Основы скриптов объектов |
Автор статьи: Torionel |
В этой статье я покажу вам часто встречающиеся в скриптах строки и объясню их значение.
Скрипт объекта - это последовательность параметров, описывающих находящийся в локации объект с различных сторон. Каждая локация содержит столько же скриптов, сколько и объектов. Скрипты локаций содержатся в файлах локаций формата .tng. Скрипт имеет начало, середину и конец. Важно не путать скрипты объектов в TNG-файлах со скриптами из файла script.bin (в последнем случае речь идёт о других скриптах - тех, которые описывают квесты).
Для начала вы должны узнать о UID'ах. Я думаю, что здесь будет уместно привести цитату моддера LostInGeneral с fabletlcmod.com:
"Прежде всего, Вы должны знать, что такое UID. Вы будете работать с ними немного. Взгляните на любой TNG-файл, и вы заметите, что у каждого скрипта есть UID. Деревни, маркеры, люди, здания, объекты, «святые участки» – у всего есть UID. Считайте, что это своего рода идентификационный номер каждого скрипта: он должен быть уникальным, ведь он действительно большой, этот UID, не так ли?".
Теперь пройдемся по самому скрипту. Начну с первой строки:
- NewThing AICreature; - если стоит такое, значит, это скрипт NPC.
- NewThing Marker; - с этого начинается скрипт маркера. Они нужны для самых разных целей, и о них я расскажу в другой раз.
- NewThing Building; - это какая-либо постройка, скажем - дом.
- NewThing Village; - скрипт, "создающий" где-либо деревню. Об этом тоже в другой раз.
- NewThing Object; - естественно, что с этой строки начинается скрипт какого-либо объекта.
Вам нужно начать скрипт с одной из этих строк, если вы спауните что-либо через блокнот, - в соответствии с тем, что вы собираетесь заспаунить.
Идём дальше.
- Player 1; - самое большое значение, которое тут может быть, это 4. Пока это нам не нужно.
- UID xxxxxxxxxxxxxxxxxxxx; - об этом уже говорилось выше.
- DefinitionType "BLABLABLA_BLABLABLA"; - расскажу, как это работает, вместо того чтобы пускаться в долгие и путаные объяснения. Скажем, если я хочу заспаунить бочонок, я вставлю в кавычки его название из раздела OBJECT в файле game.bin.
Вот так:
- DefinitionType "OBJECT_BARREL_BREAKABLE";
Если я хочу заспаунить асассина, то значение будет таким:
- DefinitionType "CREATURE_ASSASSIN";
Надеюсь, что вы поняли.
- ScriptName NULL;
- ScriptData "NULL"; - если вы не занимаетесь чем-либо вроде спауна барда либо телохранителя, то оставьте в обеих строках NULL.
- ThingGamePersistent TRUE;
- ThingLevelPersistent TRUE; - объясню на примере торговца. Если значение в этих полях установлено в TRUE, то если вы купите у этого торговца вещь, она уже там не появится после повторного входа в локацию. Если значение не TRUE, а FALSE, то - наоборот.
После этого идут строки с координатами объекта:
- StartCTCPhysicsNavigator; - начало этого самого скрипта. Надо заметить, это если вы спаунили NPC;
- если спаунили объект, то строка должна быть StartCTCPhysicsStandard;
- PositionX 19.37793; - эти строки определяют позицию вашего объекта или NPC в .tng-файле.
- PositionY 32.345947;
- PositionZ 100.210526;
- RHSetForwardX -0.2222; - скорее всего, вам не придется изменять эту строку.
- RHSetForwardY 0.974978; - обратите внимание - с помощью изменения значения в этой строке мы можем вертеть объект (уменьшение значения - по часовой стрелке, увеличение - соответственно, против часовой стрелки).
- RHSetForwardZ 0.0; - это нам не понадобится.
- RHSetUpX -0.000583; - честно говоря, я не помню, зачем нужны эти строчки)) Кажется, они отвечают за наклон объекта.
- RHSetUpY -0.000133;
- RHSetUpZ 0.999994;
- EndCTCPhysicsNavigator; - конец скрипта расположения объекта.
Эта часть скрипта решает, сможем ли мы "выделять" объект в игре:
- StartCTCTargeted; - начало этой самой части скрипта.
- Targetable TRUE; - делает объект выделяемым. Всегда ставьте 'TRUE' для NPC.
- EndCTCTargeted; - конец.
- StartCTCTalk; - начало части скрипта (только для NPC), отвечающей за разговор с какими-либо командами. Вам вряд-ли понадобится изменять это, когда вы будете писать скрипт для спауна своего NPC.
- EndCTCTalk; - конец данной части скрипта.
- StartCTCEditor; - начало части скрипта, которая имеет дело с редактором (если не понимаете о чем я - загрузите в CBox любую локацию, выделить любой объект и нажмите на CTCEditor). Единственная команда, которую тут возможно вписать - должен ли объект находиться на одном месте. Вряд ли вам это понадобится.
- EndCTCEditor; - конец данной части скрипта.
- StartCTCVillageMember; - часть скрипта, которая определяет, к какой деревне принадлежит NPC.
- VillageUID xxxxxxxxxxxxxxxxxxxx; - UID деревни. Если здесь стоит значение 0, то NPC не является членом какой-либо деревни.
- EndCTCVillageMember; - конец данной части скрипта.
- StartCTCContainerRewardHero; - начало "контейнерного" скрипта. Если вы заспаунили что-либо, куда можно засунуть вещи, скажем - разбиваемый бочонок, то можно вставить туда эту часть скрипта. Она должна иметь такой формат:
ContainerContents[0] "OBJECT_BRIAR_ROSE_IMPOSTER_SWORD";
ContainerContents[1] "OBJECT_BRIAR_ROSE_SWORD";
EndCTCContainerRewardHero;
Важно: для сундуков такая схема не прокатит.
- EndCTCContainerRewardHero; - конец данной части скрипта.