Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 29.09.2009, 09:12   #1
 Старший сержант
Аватар для glotur
 
glotur лучик света в грозовом небеglotur лучик света в грозовом небеglotur лучик света в грозовом небеglotur лучик света в грозовом небеglotur лучик света в грозовом небеglotur лучик света в грозовом небеglotur лучик света в грозовом небе
Регистрация: 20.07.2008
Сообщений: 192
Популярность: 771
Сказал(а) спасибо: 79
Поблагодарили 192 раз(а) в 95 сообщениях
Отправить сообщение для glotur с помощью ICQ
 
Exclamation Создание структур для чайников.

Автор Voland (МаинДэв форум)
Итак:
На многих форумах посвященным серверам RF Online приведены гайды по созданию структур для DatEdita, (причем все они являются копией друг друга). Я нисколько не умаляю их значимость, тем более в качестве справочной информации. Но вот понять по ним как и что делать достаточно сложно даже опытным людям, не говоря уже о новичках…… Здесь же я поставил цель разъяснить именно новичкам, что такое структуры и как их создавать).
Ну начнем с того что такое структура и зачем она нужна. Скрипты в RF online имеют вид последовательности определенных блоков (вещей, скилов, монстров, и тому подобное). Структура показывает датэдиту порядок, количество, расположение блоков, а также количество байтов внутри блока отвечающих за те или иные параметры.
Разберем создание структуры на примере файла BootyItem.dat в данном файле содержатся ресурсы, их параметры, и цены на них.
Итак, нам понадобятся:
Шестнадцатеричный редактор, например UltraEdit : [Ссылки могут видеть только зарегистрированные пользователи. ]
Сам DatEdit: [Ссылки могут видеть только зарегистрированные пользователи. ]
И блокнот (я думаю сами найдете)).
В первую очередь создаем шапку структуры:

Код:
[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:

[Ссылки могут видеть только зарегистрированные пользователи. ]

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


CopyPast by glotur[aka]romario
________________
"Мне осталась одна забава - пальцы в рот...."
От спасибки не откажусь....

[Ссылки могут видеть только зарегистрированные пользователи. ]

[Ссылки могут видеть только зарегистрированные пользователи. ]


Продаю готовые сборки сервера Rising Force Online Bellato Strikers Back V2.2.3 и РАБОЧИЙ Golden Age
Полностью готовый для первого запуска. Отлично работает как под локалку так и для "Всего Мира". Пофикшено максимальное количество багов и дюпов. (Всё что можно пофиксить руками)

ICQ для связи 326 пятьсотодин 600
  Ответить с цитированием
8 пользователя(ей) сказали cпасибо:
Витёк (03.10.2009), CaZpeR (31.10.2009), dissell5 (15.03.2013), edaks (31.12.2009), kAwAii (04.02.2010), suxmyrocket (13.10.2009), trendeg (15.12.2009), WARLOK567 (09.04.2011)
Старый 28.03.2011, 15:44   #2
 Разведчик
Аватар для BaltazarSE
 
BaltazarSE никому не известный тип
Регистрация: 16.01.2010
Сообщений: 7
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Создание структур для чайников.

Может кто нить выложить хидер файлы для 5 апа? или если есть у кого норм доступ скачать [Ссылки могут видеть только зарегистрированные пользователи. ] и перезалить на обменник....плиззз
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Создание гм акка. GSOMSSSS Rising Force Online 0 11.08.2009 18:28

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:05.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net