GXT (GTA 4) — различия между версиями

Материал из GTAModding.ru
Перейти к: навигация, поиск
(Алгоритм вычисления хэша строки)
м (Алгоритм вычисления хэша строки)
 
Строка 7: Строка 7:
 
Для вычисления хэша используется следующая разновидность алгоритма [http://en.wikipedia.org/wiki/Hash_table#Choosing_a_good_hash_function Jenkins One-at-a-time hash]:
 
Для вычисления хэша используется следующая разновидность алгоритма [http://en.wikipedia.org/wiki/Hash_table#Choosing_a_good_hash_function Jenkins One-at-a-time hash]:
 
<source lang="cpp">
 
<source lang="cpp">
DWORD GetHash(char *szKeyName)
+
DWORD GetHash(char *szKeyName)
{
+
{
    DWORD hash = 0;
+
DWORD hash = 0;
    BOOL bQuote = FALSE;
+
BOOL bQuote = FALSE;
    char ch;
+
char ch;
    if(*szKeyName == '"')
+
if(*szKeyName == '"')
    {
+
{
        bQuote = TRUE;
+
bQuote = TRUE;
        szKeyName++;
+
szKeyName++;
    }
+
}
    ch = *szKeyName;
+
ch = *szKeyName;
    while(ch)
+
while(ch)
    {
+
{
        if(bQuote)
+
if(bQuote && (ch == '"')) break;
            if(ch == '"')
+
ch = tolower(ch);
                break;
+
if(ch == '\\') ch = '/';
        if((ch >= 'A') && (ch <= 'Z'))  // make lowercase
+
hash = (hash + (ch)) * 1025;    // 0x0401
            ch += 0x20;
+
hash = hash ^ (hash >> 6);
        else if(ch == '\\')
+
ch = *++szKeyName;
            ch = '/';
+
}
        hash = (hash + (ch)) * 1025;    // 0x0401
+
hash *= 9;
        hash = hash ^ (hash >> 6);
+
hash = ((hash >> 11) ^ hash) * 32769;  // 0x8001
        szKeyName++;
+
return hash;
        ch = *szKeyName;
+
}
    }
+
    hash *= 9;
+
    hash = ((hash >> 11) ^ hash) * 32769;  // 0x8001
+
    return hash;
+
}
+
 
</source>
 
</source>
 
Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы:  
 
Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы:  

Текущая версия на 16:48, 5 октября 2013

Бинарные файлы с расширением .gxt используются для хранения текстовых строк на разных языках (для каждого языка свой файл). В упрощённом виде файл состоит из нескольких таблиц, которые содержат наборы пар ключ=значение.

Формат .gxt файлов для GTA 4 идентичен формату файлов для GTA San Andreas. Основное отличие состоит в алгоритме вычисления хэша строки, а также в длине и наборе символов в идентификаторах.

Содержание

Алгоритм вычисления хэша строки

Для вычисления хэша используется следующая разновидность алгоритма Jenkins One-at-a-time hash:

DWORD GetHash(char *szKeyName)
{
	DWORD hash = 0;
	BOOL bQuote = FALSE;
	char ch;
	if(*szKeyName == '"')
	{
		bQuote = TRUE;
		szKeyName++;
	}
	ch = *szKeyName;
	while(ch)
	{
		if(bQuote && (ch == '"')) break;
		ch = tolower(ch);
		if(ch == '\\') ch = '/';
		hash = (hash + (ch)) * 1025;    // 0x0401
		hash = hash ^ (hash >> 6);
		ch = *++szKeyName;
	}
	hash *= 9;
	hash = ((hash >> 11) ^ hash) * 32769;   // 0x8001
	return hash;
}

Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы:

  • заглавные латинские буквы ( A-Z )
  • символ подчеркивания ( _ )

Перед вычислением хэша идентификатор приводится к нижнему регистру.

Примеры идентификаторов:

BLISTA
GERV4_AIDS_86
PB_MISC_02

Теги

В текст GXT можно вставлять различные теги, которые изменяют цвет последующего текста или вставляют различные объекты в текст. Теги отгораживаются с двух сторон знаками ~ (тильда), например: ~INPUT_JUMP~ и состоят из знаков латинского алфавита, цифр и знака подчёркивания.

Теги вставки скриптовых значений

Теги изменения цвета

Теги вставки изображений

В GTA4 в текст можно вставить значки радара тегом ~BLIP_НомерЗначка~, например тег ~BLIP_74~ вставит в текст значок радара Мишель. Номера значков можно узнать из статьи Иконки радара.

Теги кнопок геймпада

В ПК-версии осталась возможность вставлять в текст значки кнопок геймпада Xbox360:

Теги игровых клавиш

Другие теги

  • ~z~ - Применяется, если текст - реплика диалога
  • ~x~ - Неизвестно. Применяется всегда вместе с ~z~

Ссылки

п · о · р
GTA 4 Grand Theft Auto IV
Форматы файлов.dat.gxt.ide.img.ipl.nod.sco.rpf.rrr.wdd.wdr.wft.wbd/wbn.whm.wad.wnv.wpl.wtd
Документация Handling.datgta.datОружиеКатсценыПутиСкриптовые функцииШифрованиеФормат CFG файла настроек
Скриптинг в GTA 4
ИнструментыAPE IVASI LoaderIV NeedleGIMSOpenIVPathViewerSparkIVXLiveLessRaCon
Скриптовые программыAliceC++ Script HookScocl.NET Script HookDelphi Hook
ТуториалыИмпортирование текстур с помощью OpenIVИмпортирование текстур с помощью SparkIV
МодификацииGTA Vice City RageIV:SAGostown Paradise IV