Спаун города |
Автор статьи: Torionel |
Спаун города (деревни) - это (как правило) завершающий этап разработки локации (хотя и не каждая локация имеет город или деревню).
Для спауна населённого пункта необходимы три составляющих:
- Локация, где будет производиться спаун города.
- Скрипт деревни.
- Объекты, предметы и люди, привязанные к этому городу (точнее, к UID'у скрипта деревни).
Факты о спауне города (деревни)
- Для спауна нужна информация о навигации (как её добавить будет описано в новой статье).
- В идеале спаун города сработает, как надо, только после начала новой игры.
- Значимые параметры города задаются в разделе "VILLAGE" ("ДЕРЕВНЯ") в game.bin. В основном названия "деревень" соответствуют названиям .tng-файлов локаций (BowerstoneSlums_v2.tng -> VILLAGE_BOWERSTONE_SLUMS).
- "VILLAGE" города нужен для того, чтобы с помощью него спаунить город (вы спауните именно этот параметр в качестве некоего невидимого предмета). Функция "VILLAGE" - агрегировать в себе ссылки на значимые CDef'ы, в которых указываются значимые параметры города.
- Многие значимые параметры города вы можете изменить в прикреплённых к его "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;
Еще пара напутствий
- Скрипты города в оригинальной игре незначительно отличаются, поэтому внимательно сравнивайте их.
- Если в модифицированной игре вы делаете город в той локации, где он уже был, возьмите скрипт из оригинала этой же локации, а не из другой.
- Координаты скрипта имеют значение: там, где он находится, спаунятся люди (стражники и жители). Ставьте, к примеру, на площади или у ворот (в самых проходных местах, где столпотворение не вызывает вопросов).
Наполнение города
После спауна нужно сделать так, чтобы в городе было интересно. Для этого нужны дома, люди, тайные проходы, жулики и шлюхи.
Самое главное, что нужно сделать, - заспаунить жилые помещения (дома или палатки), а также магазины. Всё это должно быть привязано к скрипту деревни. Привязка осуществляется через указание соответствующего UID деревни.
Если говорить конкретнее, у каждого дома в параметре CTCVillageMember должен быть указан UID деревни, а у каждого физического объекта в доме (двери, картины, мебель и проч.) - UID этого дома в параметре CTCOwnedEntity (получается нечто вроде иерархии UID'ов).
Как правило, отдельные NPC в оригинальных локациях не спаунятся (они привязаны к местам своего обитания или к скрипту самой деревни), но вы вправе сделать в своей деревне и бездомных NPC. Для этого нужно также, как и в случае с домами, указать UID деревни в параметре CTCVillageMember. Количество мужчин, женщин, детей, стражников, рабочих, призраков, внешний вид торговцев, трактирщика, официантки - всё это задаётся в CVillagePeopleDef.
Не забудьте поставить на всех постройках и предметах, где возможно найти сокровища (книжные шкафы, полки), галочки ThingGamePersistent и ThingLevelPersistent, чтобы данные объекты сохранялись в том состоянии, в каком вы их оставили, соответственно после выхода из игры и после выхода из локации (в оригинале разработчики так и делали).
Интересные факты
- при спауне здания школы Южного Бауэрстоуна (если указан id города) спаунятся также господин Подагринс (школьный учитель) и весь его класс.
Смотри также
- эта тема уже поднималась на нашем Форуме 7 лет назад.