Создание структур
Страница 1 из 1
Создание структур
Нам понадобится:
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;
}
}
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;
}
}
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|