Форум Администраторов Игровых Серверов..
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Создание структур

Перейти вниз

Создание структур Empty Создание структур

Сообщение  Admin Пн Дек 06, 2010 1:24 pm

Нам понадобится:

1. Любой текстовый редактор
2. Dateditor
3. файл со структурами C++


Типы данных:

int (С++) = i32 (Dateditor (Structorian)) - Четырехбайтное целое число
Также редко встречаются такой тип как:
unsigned int (С++) = u32 (Dateditor (Structorian))
Разница в том, что int или signed int(знаковая целая) может принимать значения от -2147483648 до +2147483647, в то время как unsigned int(без знаковая целая) от 0 до 4294967295
char (С++) = cstr (Dateditor (Structorian)) - Тип переменной для хранения простого символа, текста.
Обязательные атрибуты для cstr:
len - Указывает суммарную длину текста в байтах.
float (С++) = float (Dateditor (Structorian)) - Типы приблизительных числовых данных, используемые для числовых данных с плавающей запятой. Данные с плавающей запятой являются приблизительными, поэтому не все значения из диапазона могут быть отображены точно.
Double (С++) = Double (Dateditor (Structorian)) - Переменные типа Double хранятся как 64-разрядные (8-байтные) IEEE-числа двойной точности с плавающей запятой и знаком, которые изменяются в диапазоне от -1,79769313486231570E+308 до -4,94065645841246544E-324 для отрицательных значений и от 4,94065645841246544E-324 до 1,79769313486231570E+308 для положительных.Числа двойной точности сохраняют приближенные значения действительных чисел.


Перевод структуры из C++ в Datedit

Открываем файл "Файл со структурами C++.h" предварительно скачав его и распаковав. Видим там кучу структур. Предположим что нам нужна структура серверного файла файла Class.dat. Ищем в файле "Файл со структурами C++.h" class_fld видим примерно такое:
Код:

struct _class_fld
{
_base_fld baseclass_0;
int m_nRaceCode;
int m_nClass;
int m_nIconIDX;
int m_nGrade;
int m_nUpGradeLv;
char m_strCh_Class[8][64];
char m_strTemp[64];
char m_strKorName[64];
char m_strEngName[64];
int m_nConLim;
char m_strLinkClassSkill[10][64];
int m_bUnitUsable;
int m_bAnimusUsable;
int m_bLauncherUsable;
int m_bWMKToolUsable;
int m_bDMKToolUnitUsable;
int m_bBMKToolUnitUsable;
int m_nMakeTrapMaxNum;
int m_nBnsForHP;
int m_nBnsForFP;
int m_nBnsForSP;
int m_nUpValueDefMastery;
_mastery_lim_data m_MasteryLim;
int m_bSelectRewardItem;
_class_fld::_bns_item m_DefaultItem[9];
};

Сначала идёт маска файла и структура блока, в данном случае:
Код:

[filemask="Class.dat"]


struct ClassFile
{
u32 nBlocks;
u32 nColumns;
u32 nSize;
child ClassBlock [count=nBlocks];
}

_base_fld baseclass_0; - это общая переменная у неё есть своя структура, чтобы её узнать опять открываем файл "Файл со структурами C++.h" и ищем там struct _base_fld видим:
Код:

struct _base_fld
{
unsigned int m_dwIndex;
char m_strCode[64];
};

Видим unsigned int и знаем, что unsigned int - это u32, дальше идёт char мы знаем что char - это cstr видим в квадратных скобках 64, ммм Вы спросите чтоже это? А Я Вам отвечу это наш обязательный параметр "len". То есть при переводе на "язык" Dateditor'a получится:
Код:

[filemask="Class.dat"]


struct ClassFile
{
u32 nBlocks;
u32 nColumns;
u32 nSize;
child ClassBlock [count=nBlocks];
}

struct ClassBlock [preload=1]
{
u32 Index;
cstr [len=64] Code;

Дальше идут пять типов данных int мы знаем что int - это i32. Подставляем и получаем:

Код:

[filemask="Class.dat"]


struct ClassFile
{
u32 nBlocks;
u32 nColumns;
u32 nSize;
child ClassBlock [count=nBlocks];
}

struct ClassBlock [preload=1]
{
u32 Index;
cstr [len=64] Code;
i32 [tag="RaceCode"] DWORD;
i32 [tag="Class"] DWORD;
i32 [tag="IconIDX"] DWORD;
i32 [tag="Grade"] DWORD;
i32 [tag="UpGradeLv"] DWORD;

Дальше у нас идёт char m_strCh_Class[8][64]; цифра в-первых скобках это сколько раз повторится данная строчка, то есть 8 раз. Мы это запишем оператором repeat. Цифра во-вторых скобках - это обязательный параметр "len". Переводим, получаем:
Код:

[filemask="Class.dat"]


struct ClassFile
{
u32 nBlocks;
u32 nColumns;
u32 nSize;
child ClassBlock [count=nBlocks];
}

struct ClassBlock [preload=1]
{
u32 Index;
cstr [len=64] Code;
i32 [tag="RaceCode"] DWORD;
i32 [tag="Class"] DWORD;
i32 [tag="IconIDX"] DWORD;
i32 [tag="Grade"] DWORD;
i32 [tag="UpGradeLv"] DWORD;
repeat 8
{
cstr [len=64] Class;
}

Дальше три типа данных char, один int, один char повторяющийся 10 раз и одиннадцать int. Переводим, получаем:
Код:

[filemask="Class.dat"]


struct ClassFile
{
u32 nBlocks;
u32 nColumns;
u32 nSize;
child ClassBlock [count=nBlocks];
}

struct ClassBlock [preload=1]
{
u32 Index;
cstr [len=64] Code;
i32 [tag="RaceCode"] DWORD;
i32 [tag="Class"] DWORD;
i32 [tag="IconIDX"] DWORD;
i32 [tag="Grade"] DWORD;
i32 [tag="UpGradeLv"] DWORD;
repeat 8
{
cstr [len=64] Class;
}
cstr [len=64] Temp;
cstr [len=64] KorName;
cstr [len=64] EngName;
i32 [tag="ConLim"] DWORD;
repeat 10
{
cstr [len=64] LinkClassSkill;
}
i32 [tag="UnitUsable"] DWORD;
i32 [tag="AnimusUsable"] DWORD;
i32 [tag="LauncherUsable"] DWORD;
i32 [tag="WMKToolUsable"] DWORD;
i32 [tag="DMKToolUnitUsable"] DWORD;
i32 [tag="BMKToolUnitUsable"] DWORD;
i32 [tag="MakeTrapMaxNum"] DWORD;
i32 [tag="BnsForHP"] DWORD;
i32 [tag="BnsForFP"] DWORD;
i32 [tag="BnsForSP"] DWORD;
i32 [tag="UpValueDefMastery"] DWORD;

Дальше опять глобальная переменная ищем в файле "файл со структурами C++" struct _mastery_lim_data видим:
Код:

struct _mastery_lim_data
{
int m_nBnsMMastery[2];
int m_nBnsSMastery;
int m_nBnsDefMastery;
int m_nBnsPryMastery;
int m_nBnsMakeMastery[3];
int m_nBnsSkillMastery[8];
int m_nBnsForceMastery[24];
};

И сразу ищем struct _class_fld видим:
Код:

struct _class_fld::_bns_item
{
char strDefaultItem[64];
int nAmount;
};

Переводим и получаем полноценную структура файла Class.dat. И не забываем что у нас _class_fld девять раз повторяется.
Код:

[filemask="Class.dat"]


struct ClassFile
{
u32 nBlocks;
u32 nColumns;
u32 nSize;
child ClassBlock [count=nBlocks];
}

struct ClassBlock [preload=1]
{
u32 Index;
cstr [len=64] Code;
i32 [tag="RaceCode"] DWORD;
i32 [tag="Class"] DWORD;
i32 [tag="IconIDX"] DWORD;
i32 [tag="Grade"] DWORD;
i32 [tag="UpGradeLv"] DWORD;
repeat 8
{
cstr [len=64] Class;
}
cstr [len=64] Temp;
cstr [len=64] KorName;
cstr [len=64] EngName;
i32 [tag="ConLim"] DWORD;
repeat 10
{
cstr [len=64] LinkClassSkill;
}
i32 [tag="UnitUsable"] DWORD;
i32 [tag="AnimusUsable"] DWORD;
i32 [tag="LauncherUsable"] DWORD;
i32 [tag="WMKToolUsable"] DWORD;
i32 [tag="DMKToolUnitUsable"] DWORD;
i32 [tag="BMKToolUnitUsable"] DWORD;
i32 [tag="MakeTrapMaxNum"] DWORD;
i32 [tag="BnsForHP"] DWORD;
i32 [tag="BnsForFP"] DWORD;
i32 [tag="BnsForSP"] DWORD;
i32 [tag="UpValueDefMastery"] DWORD;
repeat 2
{
i32 [tag="BnsMMastery"] DWORD;
}
i32 [tag="BnsSMastery"] DWORD;
i32 [tag="BnsDefMastery"] DWORD;
i32 [tag="BnsPryMastery"] DWORD;
repeat 3
{
i32 [tag="BnsMakeMastery"] DWORD;
}
repeat 8
{
i32 [tag="BnsSkillMastery"] DWORD;
}
repeat 24
{
i32 [tag="BnsForceMastery"] DWORD;
}
i32 [tag="SelectRewardItem"] DWORD;
repeat 9
{
cstr [len=64] DefaultItem;
i32 [tag="Amount"] DWORD;
}
}


Admin
Admin

Сообщения : 71
Дата регистрации : 2010-12-06
Возраст : 31
Откуда : Москва

http://rf-moscow.2x2forumy.net

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения