Использование речи и радио
Вы можете заставить юнит произнести какую-либо фразу.
Во время разговора текст фразы будет отображаться в середине экрана. Для этого необходимо:
- В файле stringtable.csv нужно создать строку, определяющую текст фразы, которую по вашему замыслу должен будет произнести персонаж. В строке установите идентификатор фразы (назовем его STRM_hello), текст фразы и комментарий. Поле комментария не используется, но в нем можно указывать имя того, кто произносит речь, чтобы было легче работать в дальнейшем.
- Для разговоров вам не нужно определять экземпляр CfgIdentities в файле descriptions.ext.
- В файле descriptions.ext нужно создать экземпляр класса CfgSounds для речи, которую вы хотите услышать от персонажа. Дайте классу идентификатор (назовем его VHello). В определении класса необходимо задать имя звука (в demo всегда пустое), используемый .ogg файл со звуком, и идентификаторы текстовых строк, которые вы хотите увидеть, из файла stringtable.csv (например, STRM_hello из шага 1). Более подробное описание файла descriptions.ext лежит здесь. А научиться использовать собственные .ogg файлы можно, прочитав статью Создание собственных звуков и музыки.
- Убедитесь, что вы добавили имя .ogg файла в файл descriptions.ext (без расширения .ogg) в массив sounds[], который находится сразу после строки класса CfgSounds.
- Дайте говорящему юниту ярлык (tag), используя его поле text (назовем его truckdriver).
- Чтобы заставить юнит truckdriver сказать фразу VHello в поле expActiv,expDesActiv или init добавьте:
truckdriver say ""VHello"";
где VHello - это имя класса CfgSounds из файла description.ext (см. шаг 3)
Как научить юниты говорить по радио.
Данная процедура аналогична вышеописанной. Но текст фразы при этом будет отображаться в нижней части экрана.
- В файле stringtable.csv надо создать строку, определяющую текст произносимой персонажем по радио фразы. В строке вы задаете идентификатор (назовем его STRM_fallback), собственно текст фразы и комментарий. Строка комментария также обычно используется для обозначения автора реплики и не является обязательной.
- Для радио-переговоров вам не нужно определять экземпляр класса CfgIdentities в файле descriptions.ext.
- В файле descriptions.ext надо будет создать экземпляр класса CfgRadio для реплики, которую вы хотите услышать в исполнении персонажа. Дайте классу уникальный идентификатор (назовем его RFallback). В определении класса вы задаете название звука (в demo всегда пустое), используемый звуковой .ogg файл, и идентификаторы отображаемых текстовых строк из файла stringtable.csv (например, STRM_fallback из шага 1). Для дополнительной информации обратитесь к описанию формата файла descriptions.ext. Для обучения использованию своих собственных .ogg файлов прочитайте статью Как добавлять свои звуки и музыку.
- Убедитесь, что вы добавили имя .ogg файла в файл descriptions.ext (без расширения .ogg) в массив sounds[], который находится сразу после строки класса CfgRadio.
- В файле missions.sqm вам нужно прописать идентификацию (identity) юнита, который, по вашему мнению, должен произнести желаемую фразу. Для этого добавьте этому юниту в поле init строчку:
this setidentity ""Officer"";
где Officer - это имя класса идентификации в файле descriptions.ext (см. шаг 2)
Кроме того, не забудьте присвоить юниту ярлык с помощью его поля text (назовем его off).
- Чтобы юнит off произнес по радио фразу RFallback, обращаясь ко всем своим (юниты с идентичным значением side) в полях expActiv, expDesActiv или init добавьте строчку:
off sideRadio ""RFallback"";
где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
- Чтобы юнит off произнес по радио фразу RFallback, обращаясь ко всем юнитам из своей группы в полях expActiv,expDesActiv или init добавьте строчку:
off groupRadio ""RFallback"";
где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
- Чтобы юнит off произнес по радио фразу RFallback, обращаясь ко всем юнитам, находящимся в том же транспортном средстве, что и он сам в полях expActiv,expDesActiv или init добавьте строчку:
off vehicleRadio ""RFallback"";
где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
- ы юнит off произнес по радио фразу RFallback, обращаясь ко всем юнитам в игре в полях expActiv,expDesActiv или init добавьте строчку:
off globalRadio ""RFallback"";
где RFallback - это имя класса CfgRadio в файле description.ext (см. шаг 3).
Вы можете также включить/выключить радио, прописав в полях expActiv,expDesActiv или init строчку:
EnableRadio true;//включить
EnableRadio false;//выключить
Как научить юниты общаться в чате.
Кроме всего прочего, вы также можете заставить персонаж говорить в чате (то есть чтобы надпись отображалась в нижнем левом углу экрана). В принципе, эта функция предназначена для обмена текстовыми сообщениями в режиме многопользовательской игры, но это работает и с персонажами в однопользовательском режиме. Текст сообщения будет появляться вместе с именем юнита там же, где и радио-сообщения. Достоинство этого способа состоит в том, что вам не нужно предварительно определять строку в файле stringtable.csv! Недостаток - вы не сможете связать фразу со звуковым файлом. Для реализации этой возможности необходимо сделать следующее:
- Для чата НЕ нужно определять строку в файле stringtable.csv.
- Для чата НЕ нужно определять экземпляр CfgIdentities в файле descriptions.ext.
- Для чата НЕ нужно добавлять класс в файл descriptions.ext.
- Необходимо в файле missions.sqm прописать идентификацию для юнита, который будет использовать чат. В поле юнита init добавьте строчку:
this setidentity ""Officer"";
где Officer - это имя класса identity в файле descriptions.ext (см. шаг 2).
Не забудьте присвоить юниту ярлык при помощи поля text (назовем его off).
- Чтобы юнит off выдал в чат фразу "My advice...drink heavily", адресованную всем своим, в полях expActiv,expDesActiv или init добавьте строчку:
off sideChat ""My advice...drink heavily"";
- Чтобы юнит off произнес в чат реплику "Fat drunk and stupid is no way to go through life son", адресованную всем юнитам в своей группе, в полях expActiv,expDesActiv или init добавьте строчку:
off groupChat ""Fat drunk and stupid is no way to go through life son"";
- Чтобы юнит off сказал всем, кто сидит в ним в одном транспортном средстве, фразу "Premed...prelaw...whats the difference?", в полях expActiv,expDesActiv или init добавьте строчку:
off vehicleChat ""Premed...prelaw...whats the difference?"";
- Чтобы юнит off сообщил всем юнитам, участвующим в игре, следующее "Mind if we dance with your dates?", в полях expActiv,expDesActiv или init добавьте строчку:
off globalChat ""Mind if we dance with your dates?"";
Для чего нужен класс CfgIdentities?
Он используется для обеспечения уникальности персонажей:
- Поле name используется, когда нужен встроенный звук для определения имени говорящего. Например, если для персонажа, отдающего приказ на mount (залезть в транспортное средство), определить имя "Dude", то вы увидите "Dude" вместо обычного имени в появившейся строке с приказом в игре.
- Поля face и glasses позволят вам обеспечить определенную уникальность персонажей, заменив заданные изначально лица.
- Поля voice и pitch дают вам возможность использовать разные голоса, когда персонаж произносит одну из встроенных фраз (например mount). В демо был единственный голос - "Adam". У поля pitch значение 1.0 задается по умолчанию. Меньше 1.0 - более низкий голос, а больше 1.0 - более высокий.
- Чтобы прописать идентификацию персонажа, в файле missions.sqm нужно прописать идентификацию юниту, который вы бы хотели заставить говорить. Для этого в поле юнита init добавьте строку:
this setidentity ""Driver"";
где Driver - имя класса CfgIdentity (а не имя в поле name) в файле descriptions.ext.