Спаун города
Автор статьи: Torionel

Спаун города (деревни) - это (как правило) завершающий этап разработки локации (хотя и не каждая локация имеет город или деревню).

Для спауна населённого пункта необходимы три составляющих:

  1. Локация, где будет производиться спаун города.
  2. Скрипт деревни.
  3. Объекты, предметы и люди, привязанные к этому городу (точнее, к UID'у скрипта деревни).

Факты о спауне города (деревни)

  1. Для спауна нужна информация о навигации (как её добавить будет описано в новой статье).
  2. В идеале спаун города сработает, как надо, только после начала новой игры.
  3. Значимые параметры города задаются в разделе "VILLAGE" ("ДЕРЕВНЯ") в game.bin. В основном названия "деревень" соответствуют названиям .tng-файлов локаций (BowerstoneSlums_v2.tng -> VILLAGE_BOWERSTONE_SLUMS).
  4. "VILLAGE" города нужен для того, чтобы с помощью него спаунить город (вы спауните именно этот параметр в качестве некоего невидимого предмета). Функция "VILLAGE" - агрегировать в себе ссылки на значимые CDef'ы, в которых указываются значимые параметры города.
  5. Многие значимые параметры города вы можете изменить в прикреплённых к его "VILLAGE" "деревенских" дефах (CVillageDef, CVillagePeopleDef).

Скрипт города

Примерно такой скрипт нужно вставить через текстовый редактор (Блокнот, Notepad++ и др.) в .tng-файл вашей локации (я взял скрипт из .tng-файла Южного Бауэрстоуна).

Красным шрифтом помечены части, которые необходимо изменить под себя.

NewThing Village;
Player 4;
UID 18446741874686298956;
(Прим. - здесь укажите свой UID.)
DefinitionType "VILLAGE_BOWERSTONE_SLUMS"; (Прим. - здесь укажите свой "VILLAGE".)
ScriptName NULL;
ScriptData "NULL";
ThingGamePersistent TRUE;
ThingLevelPersistent TRUE;
Health 0.00000;
ObjectScale 1.00000;
StartCTCPhysicsStandard;
PositionX 68.76733;
PositionY 82.20850;
PositionZ 73.77101;
RHSetForwardX 0.00000;
RHSetForwardY 1.00000;
RHSetForwardZ 0.00000;
RHSetUpX 0.00000;
RHSetUpY 0.00000;
RHSetUpZ 1.00000;
EndCTCPhysicsStandard;
StartCTCVillage;
HasBeenInitiallyPopulated FALSE;
FramePlayerLastSeenByGuard -5322024;
Limbo FALSE;
IsEnemyBecauseOfCrime FALSE;
CurrentIsHeroCriminal FALSE;
EndCTCVillage;
StartCTCEnemy;
FriendsWithEverythingFlag FALSE;
EnableFollowersEnemyProxy TRUE;
FactionName "";
EndCTCEnemy;
StartCTCCreatureOpinionOfHero;
InteractedFlag FALSE;
GreetedFlag FALSE;
LastOpinionReactionFrame 0;
NumberOfTimesHit 0.0;
ToleranceToBeingHitOverride -1.0;
FrameToDecayNumberOfTimesHit 2147483647;
ForcedAttitude 18;
HeroOpinionEnemy FALSE;
EndCTCCreatureOpinionOfHero;
EndThing;

Еще пара напутствий

  1. Скрипты города в оригинальной игре незначительно отличаются, поэтому внимательно сравнивайте их.
  2. Если в модифицированной игре вы делаете город в той локации, где он уже был, возьмите скрипт из оригинала этой же локации, а не из другой.
  3. Координаты скрипта имеют значение: там, где он находится, спаунятся люди (стражники и жители). Ставьте, к примеру, на площади или у ворот (в самых проходных местах, где столпотворение не вызывает вопросов).

Наполнение города

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

Самое главное, что нужно сделать, - заспаунить жилые помещения (дома или палатки), а также магазины. Всё это должно быть привязано к скрипту деревни. Привязка осуществляется через указание соответствующего UID деревни.

Если говорить конкретнее, у каждого дома в параметре CTCVillageMember должен быть указан UID деревни, а у каждого физического объекта в доме (двери, картины, мебель и проч.) - UID этого дома в параметре CTCOwnedEntity (получается нечто вроде иерархии UID'ов).

Как правило, отдельные NPC в оригинальных локациях не спаунятся (они привязаны к местам своего обитания или к скрипту самой деревни), но вы вправе сделать в своей деревне и бездомных NPC. Для этого нужно также, как и в случае с домами, указать UID деревни в параметре CTCVillageMember. Количество мужчин, женщин, детей, стражников, рабочих, призраков, внешний вид торговцев, трактирщика, официантки - всё это задаётся в CVillagePeopleDef.

Не забудьте поставить на всех постройках и предметах, где возможно найти сокровища (книжные шкафы, полки), галочки ThingGamePersistent и ThingLevelPersistent, чтобы данные объекты сохранялись в том состоянии, в каком вы их оставили, соответственно после выхода из игры и после выхода из локации (в оригинале разработчики так и делали).

Интересные факты

  • при спауне здания школы Южного Бауэрстоуна (если указан id города) спаунятся также господин Подагринс (школьный учитель) и весь его класс.

Смотри также