Система гильдий в скриптах готики

Система гильдий в скриптах готики

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

Технически же (скриптово) механизм гильдий – это базовый механизм установки и контроля взаимоотношений множества персонажей между собой.

Можно сказать проще – чтобы регулировать отношения большой группы персонажей друг с другом и с другими группами, и применяется гильдия.

В классе персонажа есть атрибут guild (var int), через который и происходит присвоение гильдии каждому конкретному персонажу.

Основа механизма гильдий – массив GIL_ATTITUDES размерности 16 на 16 int-констант. Этот массив «зарезервирован» движком игры и не подлежит изменению в размерах. Этот массив содержит начальные взаимоотношения гильдий людей между собой.

Массив можно найти по пути AI\Human\Guilds.D

Для первоначальной работы лучше взять этот файл из каталога Content, взятого из MDK готики. В нем все крайне понятно с первого взгляда. Каждая строка и каждый столбец – это конкретная гильдия, значение на пересечении строки и столбца – это отношение гильдий друг к другу. Например, возьмем пересечение строки PAL и столбца BDT. Значение этого пересечения – ATT_HOSTILE, что означает враждебность.

Упомянем сразу константы, возможные в этом массиве:

CONST INT ATT_FRIENDLY	= 3; // дружелюбный (не нападает никогда, даже если задеть оружием) 
CONST INT ATT_NEUTRAL	= 2; // нейтральный (не нападает без повода, но если задеть оружием, даже случайно, нападает) 
CONST INT ATT_ANGRY	= 1; // сердитость (сразу не нападает, но и не разговаривает) 
CONST INT ATT_HOSTILE	= 0; // враждебность (нападает сразу, без предупреждения)

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

Так как данный массив описан как константа, его нельзя изменять по ходу игры.

Примечание: есть подозрение, что массив можно переопределить как переменную, а затем проинициализировать ее в startup.d; это даст возможность менять содержимое массива «на лету»; попозже постараюсь проверить это дело.

Но что же делать, если нужно поменять отношения гильдий прямо по ходу игры?

Для этого служит функция

void Wld_SetGuildAttitude (int guild1, int attitude, int guild2);

- установить отношение между гильдиями, где guild1, guild2 – гильдии, между которыми устанавливается отношение, attitude – отношение между гильдиями (определены отношения ATT_HOSTILE, ATT_FRIENDLY, ATT_NEUTRAL, ATT_ANGRY).

Пример использования:

WLD_SetGuildAttitude(GIL_PAL, ATT_FRIENDLY, GIL_VLK);

- «подружили» паладинов и горожан.

Чтобы узнать взаимоотношения гильдий, применяется функция

int Wld_GetGuildAttitude (int guild1, int guild2);

- получить отношение между гильдиями guild1 и guild2.

Пример использования:

vCurrentGuild_PAL_VLK = WLD_GetGuildAttitude(GIL_PAL, GIL_VLK);

- в переменную vCurrentGuild_PAL_VLK будет возвращено значение, выставленное ранее функцией WLD_SetGuildAttitude, или, если оно не менялось, из массива GIL_ATTITUDES.

Нужно отметить, что все, что сказано выше про гильдии – это самый базовый, «нижний» уровень обработки отношений между персонажами. Исходя из системы отношений между гильдиями, движок «принимает решение» о том, кто кому враг или друг; это решение затем определяет, какой обработчик восприятий будет вызван – к примеру, если между гильдиями двух персонажей прописаны враждебные отношения, то в качестве обработчика восприятий (реакции персонажей друг на друга) будет вызван обработчик B_AssessEnemy; если же гильдии не враждебны, будет вызваны другие обработчики.

А сами обработчики восприятий – это более узкая, «точечная» работа, позволяющая манипулировать отношениями как множеств персонажей, так и нескольких конкретных NPC; но это уже другая тема.

Система гильдий позволяет также оперировать отношениями к конкретному жизненном пространству. Говоря проще J - можно присвоить каждой конкретной комнате или зданию принадлежность к определенной гильдии – после чего отношения между гильдиями начнут распространяться на данную комнату и на находящихся в ней персонажей.

К примеру, казармам милиции присвоен статус GIL_MIL. Любой, кто войдет туда, будет «проверен» движком игры на взаимоотношения гильдии персонажа и комнаты. Затем ситуация будет передана в обработчик восприятий входа в комнату B_AssessPortalCollision, в которой уже будет произведен тщательный разбор создавшейся ситуации.

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

Автор

Автор статьи - marazmus.

/var/www/wogru_main/data/www/mod.worldofgothic.ru/data/pages/scripting/guild-system.txt · Последние изменения: 09-01-2009 08:14 (внешнее изменение)

Проект портала World of Gothic RU. © 2005-2009 marazmus, MaGoth и команда World of Gothic RU.
Копирование материалов сайта разрешено только при явном согласии авторов материалов.
При копировании материалов прямая ссылка на сайт обязательна.

Rambler's Top100 Рейтинг Ролевых Ресурсов

Предлагаем блестящие, оригинальный накладки на пороги для M. Pajero
Скачать Blu-ray фильмы
Аркаим в контексте современности
Китайские запчасти для great wall deer . Бесплатная доставка