Лучшие пользователи
Показать всех
А тем временем на форуме
 
 
Главная » Новости » Мануалы RF online

Гайд по редактированию текстур в RFonline

Добавлено  Itachi 2011-05-02 19:24:27 в Мануалы RF online 

нам понадобятся:
Шестнадцатеричный редактор, например UltraEdit : http://narod.ru/disk/10768342000/UltraEdit.rar.html
Сам DatEdit: http://narod.ru/disk/10768703000/DATedit.rar.html
И блокнот (я думаю сами найдете)).
В первую очередь создаем шапку структуры:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
Первой строчкой мы указываем имя файла для которого мы делаем данную структуру, в последующем Датэдит будет видеть именно этот файл.
Вторая строчка – название нашей структуры, обычно составляется из названия файла и добавления к нему File. Это практика стандартизации, но можете поставить что-нибудь свое).
Далее у нас следует начало структуры первого уровня, она показывает на сколько блоков разбита структура и размер этих блоков.
начинается она с фигурной скобки, поставили её:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
Далее открываем ультра эдитом редактором наш файл.
Видим следующее:
Слева HEX код, представленный виде байтов (каждый байт – 2 символа).
Справа – попытка расшифровки данных байтов, самим редактором (на практике читает только строки да и то не все, но при создании помогает).
Все создание структуры основано на цикличности этой структуры….. то есть она повторяется с определенным периодом. За исключением первых 8-12 байтов. Немного о переменных. Основа любой структуры блок из 4 байтов, чаще используется переменная: u32 она означает что число содержит только положительные десятичные значения и имеет размер в 4 байта (на скрине обозначены рамочками разных цветов). Итак, первоначально начинаем разбивать структуру на блоки по 4 байта….. Причем первые два блока относятся к структуре первого уровня (то есть объясняют серверу размер блока), возможно к нему же относится и третий блок, но мы этого пока не знаем…….. Так что пока останавливаемся на двух. Содержание всегда обозначается переменной u32. Итак у нас получается:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
Опять же nBlocks и nSize – это стандартные обозначения, но можете представить любую другую).
после идет строка: child BootyItemBlock [count=nBlocks];
Где:
child – указание что мы назначаем структуру второго уровня
BootyItemBlock – название структуры второго уровня.
count – количество блоков в структуре (в данном случае count=nBlocks означает что датэдит будет брать данное количество из значения которое мы указывали выше (u32 nBlocks
Вообще это типовые настройки и их при создании можно копировать просто изменяя названия.
Закрываем структуру первого уровня:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
child BootyItemBlock [count=nBlocks];
}
Открываем структуру второго уровня:
Код:
struct BootyItemBlock [preload=1]
Где:
struct – сообщает что мы начинаем структуру второго уровня,
BootyItemBlock – название (должно соответствовать строчке child BootyItemBlock [count=nBlocks]
[preload=1] - показывает следует ли загружать данную структуру, принимает значения 1 (загрузить) и 0 (не загружать) (так как она у нас одна, то разумеется загружаем)).
Открываем структуру
Код:
{
И смотрим что у нас получилось, первые 8 байтов у нас ушли в первую структуру (красная и бордовая рамочки), значит их пропускаем. Далее смотрим дальше, желтая рамочка, это типичный четырехбайтовый блок, но после него идут нули….. То есть это либо просто пустой блок, либо 8 байтовая строка (дальше у нас уже идет строчка, причем заполненная, так что к нашему блоку она не относится). Смотрим на расшифровку справа, строчки напротив желтого блока мы не видим, значит предполагаем что зеленый, просто пустой блок. Так и записываем:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
u32 nCount;
Пока для удобства все 4 байтовые блоки мы будем обозначать строчкой: u32 nCount;
менять параметры и добавлять названия мы будем на стадии расшифровки.
Далее у нас идет строка: iyyyy01 (это видно в редакторе справа), указывается в структуре строчкой: cstr [len=*], где звездочка это количество байтов в данной строке. Так как на строки не распространяются ограничения по 4 байта (хотя обычно они кратны четырем, но не всегда), считаем сколько нулевых байтов идет после нашей строчки до первого не нулевого байта. (синяя рамочка) получилось 64.
Записываем в нашу структуру:
Код:
cstr [len=64];
Смотрим дальше, снова видим блок из 4 байтов (начало с цифрами, потом нули – фиолетовая рамочка), ставим в структуру: u32 nCount;
Далее опять строка, считаем байты опять 64.
ставим:
cstr [len=64];
далее, 4 байта (оранжевая рамочка)
u32 nCount;
Смотрим дальше, и видим 4 заполненых байта, и дальше нулевые, вроде бы строка, но справа ничего понятного нет….. Смотрим на количество нулевых байтов, их много), значит быстрее всего это все же строка, а «крякозябры» быстрее всего название вещи). Просто сервер бразильский, и названия вещей могут быть на португальском, который наши компьютеры не берут. Так что считаем байты (снова 64) и пишем строку:
cstr [len=64];
итого у нас получается:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
u32 nCount;
cstr [len=64];
u32 nCount;
cstr [len=64];
u32 nCount;
cstr [len=64];
Далее заполняем структуру по тому же принципу: там где нулевых байтов меньше 8 подряд, пишем «u32 nCount;» Там где больше: cstr [len=*] (количество байтов) - светло зеленые блоки.
Получилось следующее:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
u32 nCount;
cstr [len=64];
u32 nCount;
cstr [len=64];
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=68];
вот тут мы немного застопориваемся. Дальше явно идет начало второго блока (новый код вещи), но перед кодом только один четырехбайтовый блок (черные рамочки) А у нас по структуре их должно быть два! Значит самый первый блок у нас относится к структуре первого уровня. Переделываем и закрываем структуру:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
u32 nColumns;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
cstr [len=64];
u32 nCount;
cstr [len=64];
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=68];
}
Сохраняем её как документ с расщирением strs.
В нашем случае: BootyItem.strs
Открываем Датэдит, загружаем структуру, редактируемый файл и смотрим что получилось:
Просматриваем по пунктам, если смещений нету (как у нас), то мы все сделали правильно, и можно себя поздравить . Если есть то, ищем и исправляем.
После того как мы закончили составлять, переходим к расшифровке, ну в первую очередь, можно поставить названия надписей: iyyyy01; A30200; tiyyyy01 (черные рамочки) – код вещи, ставим в пояснения:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
u32 nColumns;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
cstr [len=64] Code1;
u32 nCount;
cstr [len=64] Code2;
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=68] Code3;
}
Пояснения нужны только нам самим что бы не путаться в структуре).
Странная сточка: Е¬ёµ (красная рамка) - это название вещи (причина такого вида описана выше), ставим:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
u32 nColumns;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
cstr [len=64] Code1;
u32 nCount;
cstr [len=64] Code2;
u32 nCount;
cstr [len=64] Name;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=64];
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=68] Code3;
}
C последней строкой, которая равна 1 (синяя рамка), ничего не понятно, значит можно её и не трогать.
Далее нам нужно найти то ради чего мы собственно все и затеяли, а именно цену ресурсов. для этого просматриваем строчки, и ищем строку которая активно меняется, заходим в игру и сравниваем цены ресурса (по коду) и цифры указанные в скрипте (еще раз обращаю внимания, что цена может немного отличаться – у магазинов свои надбавки). В итоге мы вывели что строчка цены – 280 (фиолетовая рамка) ставим туда Price, синтаксис коды выглядит так:
Код:
u32 [tag="название"] nCount;
В нашем случае:
Код:
u32 [tag="Price"] nCount;
Итак у нас получилось:
Код:
[filemask="BootyItem.dat"]
struct BootyItemFile
{
u32 nBlocks;
u32 nSize;
u32 nColumns;
child BootyItemBlock [count=nBlocks];
}
struct BootyItemBlock [preload=1]
{
u32 nCount;
cstr [len=64] Code1;
u32 nCount;
cstr [len=64] Code2;
u32 nCount;
cstr [len=64] Name;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=64];
u32 [tag="Price"] nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
u32 nCount;
cstr [len=68] Code3;
}
Сохраняем структуру, и перезапускаем DatEdit:
Вот собственно и все. На остальные пункты можно не обращать внимания (хотя кто хочет, может попробовать заняться расшифровкой)).

Комментарии (2):

User avatar

FreeKill

2011-05-04 16:53:08

Хм... что-то тут замудрёно сильно могу сказать что это бред имхо это всё делается на стороне сервера чуть позже напишу гайд для клиентских файлов

User avatar

Itachi

2011-05-07 20:03:33

илюха епти молчал бы :D
у самого мануалы , хер поймёшь , что и как :p






 
 
Вверх