//Adress: 0x401393
struct STRUCT_STATICEFFECT
{
short sEffect;
short sValue;
};
struct STRUCT_ITEMLIST
{
char Name[64];
short nIndexMesh;
short nIndexTexture;
short nIndexVisualEffect;
short nReqLvl;
short nReqStr;
short nReqInt;
short nReqDex;
short nReqCon;
STRUCT_STATICEFFECT stEffect[12];
int nPrice;
short nUnique;
short nPos;
short nExtra;
short nGrade;
};
int BASE_ReadItemListFile(char* filename, int Build)
{
FILE* Stream = nullptr;
errno_t err = 0;
if (!Build || (err = fopen_s(&Stream, "extraitem.bin", "wb"), Stream))
{
char FileName[256]{};
snprintf(FileName, sizeof(FileName), "%s", filename);
FILE* fp = nullptr;
err = fopen_s(&fp, FileName, "rb");
if (!fp)
{
snprintf(FileName, sizeof(FileName), "../../TMSRV/Run/%s", filename);
err = fopen_s(&fp, FileName, "rb");
}
if (fp)
{
while (1)
{
int Index = -1;
char Name[256]{};
memset(Name, 0, sizeof(Name));
char Str2[12][256]{};
memset(Str2, 0, sizeof(Str2));
int Str1[12]{};
memset(Str1, 0, sizeof(Str1));
int str2 = 48;
int str1 = 3072;
char Text[1024]{};
if (!fgets((char*)Text, 1024, fp))
break;
for (int i = 0; i < 1024; ++i)
{
if (Text[i] == ',')
Text[i] = ' ';
if (!Text[i])
break;
}
char v19[256]{};
v19[0] = 0;
char v18[256]{};
v18[0] = 0;
int nUnique = 0;
int nPrice = 0;
int nPos = 0;
int nGrade = 0;
int nExtra = 0;
sscanf_s(Text, "%d %s %s %s %d %d %d %d %d %s %d %s %d %s %d %s %d %s %d %s %d %s %d %s %d %s %d %s %d %s %d %s %d", //33
&Index,
Name, sizeof(Name),
v19, sizeof(v19),
v18, sizeof(v18),
&nUnique,
&nPrice,
&nPos,
&nExtra,
&nGrade,
Str2[0], sizeof(Str2[0]),
&Str1[0],
Str2[1], sizeof(Str2[1]),
&Str1[1],
Str2[2], sizeof(Str2[2]),
&Str1[2],
Str2[3], sizeof(Str2[3]),
&Str1[3],
Str2[4], sizeof(Str2[4]),
&Str1[4],
Str2[5], sizeof(Str2[5]),
&Str1[5],
Str2[6], sizeof(Str2[6]),
&Str1[6],
Str2[7], sizeof(Str2[7]),
&Str1[7],
Str2[8], sizeof(Str2[8]),
&Str1[8],
Str2[9], sizeof(Str2[9]),
&Str1[9],
Str2[10], sizeof(Str2[10]),
&Str1[10],
Str2[11], sizeof(Str2[11]),
&Str1[11]);
if (Index != -1)
{
if (Index < MAX_ITEMLIST)
{
int len = strlen(Name);
if (len >= 63)
{
MessageBox(NULL, "too long Item Name", Name, MB_OK);
Name[63] = 0;
Name[52] = 0;
}
strcpy_s(g_pItemList[Index].Name, 0x40u, Name);
int nIndexMesh = 0;
int nIndexTexture = 0;
int nReqLvl = 0;
int nReqStr = 0;
int nReqInt = 0;
int nReqDex = 0;
int nReqCon = 0;
if (v19[0] == '.')
v19[0] = ' ';
if (v18[0] == '.')
v18[0] = ' ';
sscanf_s(v19, "%d.%d", &nIndexMesh, &nIndexTexture);
sscanf_s(v18, "%d.%d.%d.%d.%d", &nReqLvl, &nReqStr, &nReqInt, &nReqDex, &nReqCon);
g_pItemList[Index].nIndexMesh = nIndexMesh;
g_pItemList[Index].nIndexTexture = nIndexTexture;
g_pItemList[Index].nReqLvl = nReqLvl;
g_pItemList[Index].nReqStr = nReqStr;
g_pItemList[Index].nReqInt = nReqInt;
g_pItemList[Index].nReqDex = nReqDex;
g_pItemList[Index].nReqCon = nReqCon;
g_pItemList[Index].nUnique = nUnique;
g_pItemList[Index].nPrice = nPrice;
g_pItemList[Index].nPos = nPos;
g_pItemList[Index].nGrade = nGrade;
g_pItemList[Index].nExtra = nExtra;
g_pItemList[Index].nIndexVisualEffect = 0;
for (int j = 0; j < 12; ++j)
{
if (Str2[j][0])
{
int k = 0;
for (k = 0; k < 127; ++k)
{
int v4 = strcmp(EffectNameTable[k], Str2[j]);
if (!v4)
break;
}
if (j == 127)
{
MessageBoxA(0, Text, "Unregisterd effect", 0);
}
else
{
g_pItemList[Index].stEffect[j].sEffect = k;
g_pItemList[Index].stEffect[j].sValue = Str1[j];
}
}
}
if (Build)
{
fwrite(&Index, 2, 1, Stream);
fwrite(&g_pItemList[Index], sizeof(STRUCT_ITEMLIST), 1, Stream);
}
}
else
{
MessageBoxA(0, Text, "check MAX_ITEMLIST", 0);
}
}
}
fclose(fp);
if (Build)
fclose(Stream);
return true;
}
else
{
if (Stream)
fclose(Stream);
return false;
}
}
else
{
MessageBoxA(0, "Can't write extraitem.bin", "ERROR", 0x1000u);
return false;
}
}