FG
Издание о Fable

Основы скриптов объектов
Автор статьи: 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; - начало "контейнерного" скрипта. Если вы заспаунили что-либо, куда можно засунуть вещи, скажем - разбиваемый бочонок, то можно вставить туда эту часть скрипта. Она должна иметь такой формат:
Код
StartCTCContainerRewardHero;
ContainerContents[0] "OBJECT_BRIAR_ROSE_IMPOSTER_SWORD";
ContainerContents[1] "OBJECT_BRIAR_ROSE_SWORD";
EndCTCContainerRewardHero;

Важно: для сундуков такая схема не прокатит.

  • EndCTCContainerRewardHero; - конец данной части скрипта.
Больше интересного о Fable — в нашем Telegram-канале