Статистика по выложенному объему ( Общая )
субтитры из паранойи
субтитры из паранойи.
Автор / ы урока : Alex_Gordon Просмотров : 2603 ( +2 ) Скачиваний : 56 Прислал / (а) : Streit Дата создания : 07.04.2011 21:35:07 Источник : http://www.hlfx.ru/forum Рейтинг : ( 3.5 ) Поделиться :
Имеются следующие переводы : |
русский |
Всем привет.
Сейчас мы сделаем субтитры из паранойи.
Первым делом нам понадобятся 2 файла: vgui_subtitles.cpp и vgui_subtitles.h (см. аттач) Добавим их на клиент.
Теперь откроем Client, в нем найдем файл vgui_TeamFortressViewport.cpp. Откроем его. Найдем строку:
Код:
m_pCurrentCommandMenu = NULL;
и после нее добавим:
Код:
m_pSubtitle = NULL;
Теперь найдем:
Код:
App::getInstance()→setCursorOveride( App::getInstance()→getScheme()→getCursor(Scheme::SchemeCursor::scu_none) );
И после добавим:
Код:
m_pSubtitle = new CSubtitle();
m_pSubtitle→setParent(this);
m_pSubtitle→setVisible(false);
Теперь найдем функцию void TeamFortressViewport::Initialize( void ) и в нее добавим:
Код:
if (m_pSubtitle)
m_pSubtitle→Initialize();
С этим файлом все. Откроем vgui_TeamFortressViewport.h
Добавим новый инклюд:
Код:
#include "vgui_subtitles.h"
Потом найдем строку
Код:
char m_szServerName[ MAX_SERVERNAME_LENGTH ];
и после нее напишем:
Код:
CSubtitle* m_pSubtitle;
Клиент можно компилировать. Переходим к серверу.
Откроем util.cpp и найдем там функцию UTIL_EmitAmbientSound
Полностью заменим ее на:
Код:
void UTIL_EmitAmbientSound( edict_t *entity, const Vector &vecOrigin, const char *samp, float vol, float attenuation, int fFlags, int pitch )
{
float rgfl[3];
vecOrigin.CopyToArray(rgfl);
if (samp && *samp == '!')
{
char name[32];
if (SENTENCEG_Lookup(samp, name) >= 0)
EMIT_AMBIENT_SOUND(entity, rgfl, name, vol, attenuation, fFlags, pitch);
UTIL_ShowMessagePVS( samp, vecOrigin );
}
else
EMIT_AMBIENT_SOUND(entity, rgfl, samp, vol, attenuation, fFlags, pitch);
}
Теперь ищем функцию void UTIL_ShowMessageAll( const char *pString ) и после нее добавляем новую:
Код:
void UTIL_ShowMessagePVS( const char *pString, const Vector &org )
{
// loop through all players
for ( int i = 1; i ⇐ gpGlobals→maxClients; i++ )
{
CBaseEntity *pPlayer = UTIL_PlayerByIndex( i );
if ( pPlayer && pPlayer→IsNetClient() )
{
float flDist = (pPlayer→pev→origin - org ).Length();
if ( flDist > 300 )
continue;
// MESSAGE_BEGIN( MSG_ONE, gmsgHudText, NULL, pEntity→edict() );
MESSAGE_BEGIN( MSG_PVS, gmsgHudText, org );
WRITE_STRING( pString );
MESSAGE_END();
}
}
}
Теперь откроем sound.cpp и найдем там функцию:
Код:
EMIT_SOUND_DYN(edict_t *entity, int channel, const char *sample, float volume, float attenuation,
int flags, int pitch)
Полностью заменим ее на:
Код:
void EMIT_SOUND_DYN(edict_t *entity, int channel, const char *sample, float volume, float attenuation,
int flags, int pitch)
{
if (sample && *sample == ! )
{
char name[32];
if (SENTENCEG_Lookup(sample, name) >= 0)
{
EMIT_SOUND_DYN2(entity, channel, name, volume, attenuation, flags, pitch);
// ALERT(at_console, "play sentence %s, output %s\n", sample, name);
}
else
ALERT( at_aiconsole, "Unable to find %s in sentences.txt\n", sample );
// buz: send sencences as text messages to lookup subtitles in titles.txt
// UTIL_ShowMessageAll( sample );
UTIL_ShowMessagePVS( sample, entity->v.origin );
}
else
{
EMIT_SOUND_DYN2(entity, channel, sample, volume, attenuation, flags, pitch);
// ALERT(at_console, "play sound %s\n", sample);
}
}
Теперь откроем util.h и найдем там:
Код:
extern void UTIL_ShowMessageAll ( const char *pString );
После напишем:
Код:
extern void UTIL_ShowMessagePVS( const char *pString, const Vector &org ); // buz
Можно компилировать. Теперь сделаем текст самих субтитров. Он записывается в titles.txt предпочтительно в конец файла. Откроем этот файл, спустимся вниз и добавим там:
Код:
!BA_DESK
{
Барни: Здравствуйте, Мистер Фримен.
У меня для вас было много сообщений,
но из-за ошибки системы, которая
произошла минут 20 назад, я не могу
их вам передать. Еще один неудачный
день…
Проблемы в тест-камере были, но,
насколько я знаю, они уже исправлены.
Мне сказано проследить, что вы надели
ваш HEV костюм.
}
Здесь !BA_DESK - это название сентенса из файла sentences.txt с восклицательным знаком перед ним.
Результат:
Похожие 1. Trigger_PlayerFreeez - Trigger_PlayerFreeez (остановка игрока) 2. Quake strafing & DoD bobing styles - Вот от нечего делать я решил немножко изменить стиль игры в оригинальной хл. 3. Переключение оружия a la HL2 - Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2 4. Создание сценариев - Для создания сценариев (aka скриптов) в Half-Life существуют две энтити: scripted_sequence и scripted_sentence. Первая отвечает за движения, выполняемые монстром/персонажем, будь то ходьба, бег, нажатие кнопки, тряска автомата с газировкой или почёсывание подбородка. Вторая служит для того, чтобы персонаж произнес какую-то фразу. При этом его голова повернётся в сторону слушателя, и рот будет открываться в соответствии с амплитудой звука. 5. Создание КООП,смена карт аля сингл - Сдесь я расскажу как разрешить синглплеерные скрипты в мултиплеере! 6. Sparks - Как добавить искры
Вы не можете комментировать, т.к. вы не зарегистрированы.