C++ isn't that hard really. :p
Also below should be able to load quest rdbs for E4. Either that or E3/2 I don't remember which client they are for. xD
#include "DataType.h"
#include "ExportDLL.h"
#include "IRowManipulator.h"
#ifdef __cplusplus
extern "C" {
#endif
static FieldDescriptor df[] =
{ { 1, TYPE_INT32, "id" },
{ 1, TYPE_INT32, "text_id_quest" },
{ 1, TYPE_INT32, "text_id_summary" },
{ 1, TYPE_INT32, "text_id_status" },
{ 1, TYPE_INT32, "limit_level" },
{ 1, TYPE_INT32, "limit_job_level" },
{ 1, TYPE_BIT, "limit_quest_indication" },
{ 1, TYPE_BIT, "limit_deva" },
{ 1, TYPE_BIT, "limit_asura" },
{ 1, TYPE_BIT, "limit_gaia" },
{ 1, TYPE_BIT, "limit_fighter" },
{ 1, TYPE_BIT, "limit_hunter" },
{ 1, TYPE_BIT, "limit_magician" },
{ 1, TYPE_BIT, "limit_summoner" },
{ 1, TYPE_INT8 | TYPE_SQLIGNORE | TYPE_CSVIGNORE, "nv" },
{ 1, TYPE_INT8 | TYPE_SQLIGNORE | TYPE_CSVIGNORE, "nv" },
{ 1, TYPE_INT8 | TYPE_SQLIGNORE | TYPE_CSVIGNORE, "nv" },
{ 1, TYPE_INT32, "limit_job" },
{ 1, TYPE_INT32, "limit_favor" },
{ 1, TYPE_INT32, "repeatable" },
{ 1, TYPE_INT32, "invoke_condition" },
{ 1, TYPE_INT32, "invoke_value" },
{ 1, TYPE_INT32, "type" },
{ 1, TYPE_INT32, "value1" },
{ 1, TYPE_INT32, "value2" },
{ 1, TYPE_INT32, "value3" },
{ 1, TYPE_INT32, "value4" },
{ 1, TYPE_INT32, "value5" },
{ 1, TYPE_INT32, "value6" },
{ 1, TYPE_INT32, "value7" },
{ 1, TYPE_INT32, "value8" },
{ 1, TYPE_INT32, "value9" },
{ 1, TYPE_INT32, "value10" },
{ 1, TYPE_INT32, "value11" },
{ 1, TYPE_INT32, "value12" },
{ 1, TYPE_INT32, "drop_group_id" },
{ 1, TYPE_INT32, "quest_difficulty" },
{ 1, TYPE_INT32, "favor" },
{ 1, TYPE_INT32, "exp" },
{ 1, TYPE_INT32, "jp" },
{ 1, TYPE_INT32, "gold" },
{ 1, TYPE_INT32, "default_reward_id" },
{ 1, TYPE_INT32, "default_reward_level" },
{ 1, TYPE_INT32, "default_reward_quantity" },
{ 1, TYPE_INT32, "optional_reward_id1" },
{ 1, TYPE_INT32, "optional_reward_level1" },
{ 1, TYPE_INT32, "optional_reward_quantity1" },
{ 1, TYPE_INT32, "optional_reward_id2" },
{ 1, TYPE_INT32, "optional_reward_level2" },
{ 1, TYPE_INT32, "optional_reward_quantity2" },
{ 1, TYPE_INT32, "optional_reward_id3" },
{ 1, TYPE_INT32, "optional_reward_level3" },
{ 1, TYPE_INT32, "optional_reward_quantity3" },
{ 1, TYPE_INT32, "forequest1" },
{ 1, TYPE_INT32, "forequest2" },
{ 1, TYPE_INT32, "forequest3" },
{ 1, TYPE_INT32, "or_flag" },
{ 512, TYPE_CHAR | TYPE_RDBIGNORE, "script_start_text" },
{ 512, TYPE_CHAR | TYPE_RDBIGNORE, "script_end_text" },
{ 512, TYPE_CHAR | TYPE_RDBIGNORE, "script_text" } };
#pragma comment(linker, "/EXPORT:registerDBStructure=_registerDBStructure@8" )
void EDATABASEDLL DLLCALLCONV registerDBStructure(FieldDescriptor **dfmPtr, int *sizePtr)
{
*dfmPtr = df;
*sizePtr = sizeof(df) / sizeof(FieldDescriptor);
}
#pragma comment(linker, "/EXPORT:convertData=_convertData@16")
void EDATABASEDLL DLLCALLCONV convertData(eDataFormat dst, eDataConvertionType mode, IRowManipulator *row, unsigned int rowNum)
{
if (mode == DCT_Read && dst == DF_RDB)
{
if (*static_cast<int*>(row->getValuePtr("or_flag")) == 11599872)
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 0;
}
else if (*static_cast<int*>(row->getValuePtr("or_flag")) == 11665407)
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 1;
}
}
else if (mode == DCT_Write && dst == DF_RDB)
{
if (*static_cast<int*>(row->getValuePtr("or_flag")))
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 11665407;
}
else
{
*static_cast<int*>(row->getValuePtr("or_flag")) = 11599872;
}
}
}
#pragma comment(linker, "/EXPORT:getDefaultFileName=_getDefaultFileName@0")
EDATABASEDLL const char* DLLCALLCONV getDefaultFileName()
{
return "db_quest";
}
#pragma comment(linker, "/EXPORT:getDefaultTableName=_getDefaultTableName@0" )
EDATABASEDLL const char* DLLCALLCONV getDefaultTableName()
{
return "QuestResource";
}
#pragma comment(linker, "/EXPORT:getSQLColumnOrder=_getSQLColumnOrder@0")
EDATABASEDLL const char* DLLCALLCONV getSQLColumnOrder()
{
return "id\0"
"text_id_quest\0"
"text_id_summary\0"
"text_id_status\0"
"limit_level\0"
"limit_job_level\0"
"limit_quest_indication\0"
"limit_deva\0"
"limit_asura\0"
"limit_gaia\0"
"limit_fighter\0"
"limit_hunter\0"
"limit_magician\0"
"limit_summoner\0"
"limit_job\0"
"limit_favor\0"
"repeatable\0"
"invoke_condition\0"
"invoke_value\0"
"type\0"
"value1\0"
"value2\0"
"value3\0"
"value4\0"
"value5\0"
"value6\0"
"value7\0"
"value8\0"
"value9\0"
"value10\0"
"value11\0"
"value12\0"
"drop_group_id\0"
"quest_difficulty\0"
"favor\0"
"exp\0"
"jp\0"
"gold\0"
"default_reward_id\0"
"default_reward_level\0"
"default_reward_quantity\0"
"optional_reward_id1\0"
"optional_reward_level1\0"
"optional_reward_quantity1\0"
"optional_reward_id2\0"
"optional_reward_level2\0"
"optional_reward_quantity2\0"
"optional_reward_id3\0"
"optional_reward_level3\0"
"optional_reward_quantity3\0"
"forequest1\0"
"forequest2\0"
"forequest3\0"
"or_flag\0"
"script_start_text\0"
"script_end_text\0"
"script_text\0";
}
#pragma comment(linker, "/EXPORT:getCSVColumnOrder=_getCSVColumnOrder@0")
EDATABASEDLL const char* DLLCALLCONV getCSVColumnOrder()
{
return getSQLColumnOrder();
}
#ifdef __cplusplus
}
#endif