void ReadConfig()
{
FILE* Stream = nullptr;
fopen_s(&Stream, "gameconfig.txt", "rt");
if (!Stream)
{
MessageBoxA(hWndMain, "no gameconfig.txt, server will generate default setting.", "Error", 0x1000u);
GameConfig = 1;
DrawConfig(1);
return;
}
char Parm[16][32]{};
int Value[36]{};
char String[255]{};
// ================= Drop Item Event Settings =================
fgets(String, 255, Stream);
if (strcmp(String, "Drop Item Event Settings:\n"))
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line1", "Error", 0x1000u);
fclose(Stream);
return;
}
for (int i = 0; i < 16; ++i)
{
Value[i] = -1;
memset(Parm[i], 0, 0x20u);
}
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d %s %d %s %d %s %d %d %d %d",
Parm[0], sizeof(Parm[0]), &Value[0],
Parm[1], sizeof(Parm[1]), &Value[1],
Parm[2], sizeof(Parm[2]), &Value[2],
Parm[3], sizeof(Parm[3]), &Value[3],
Parm[4], sizeof(Parm[4]), &Value[4],
Parm[5], sizeof(Parm[5]), &Value[5],
&Value[6], &Value[7], &Value[8]);
if (strcmp(Parm[0], "evindex") || strcmp(Parm[1], "evdelete") ||
strcmp(Parm[2], "evon") || strcmp(Parm[3], "evitem") ||
strcmp(Parm[4], "evrate") || strcmp(Parm[5], "evstart"))
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line2", "Error", 0x1000u);
fclose(Stream);
return;
}
if (Value[0] == -1 || Value[1] == -1 || Value[2] == -1 || Value[3] == -1 ||
Value[4] == -1 || Value[5] == -1 || Value[6] == -1 || Value[7] == -1)
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line2", "Error", 0x1000u);
fclose(Stream);
return;
}
evIndex = Value[0];
evDelete = Value[1];
evOn = Value[2];
evItem = Value[3];
evRate = Value[4];
evStartIndex = Value[5];
evCurrentIndex = Value[6];
evEndIndex = Value[7];
evNotice = Value[8];
// ================= Etc Event Settings =================
fgets(String, 255, Stream);
if (strcmp(String, "Etc Event Settings:\n"))
{
MessageBoxA(hWndMain, "not game server generated gameconfig.txt - Line3", "Error", 0x1000u);
fclose(Stream);
return;
}
for (int i = 0; i < 16; ++i)
{
Value[i] = -1;
memset(Parm[i], 0, 0x20u);
}
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d %s %d %s %d %s %d %s %d",
Parm[0], sizeof(Parm[0]), &Value[0],
Parm[1], sizeof(Parm[1]), &Value[1],
Parm[2], sizeof(Parm[2]), &Value[2],
Parm[3], sizeof(Parm[3]), &Value[3],
Parm[4], sizeof(Parm[4]), &Value[4],
Parm[5], sizeof(Parm[5]), &Value[5],
Parm[6], sizeof(Parm[6]), &Value[6]);
if (strcmp(Parm[0], "double") || strcmp(Parm[1], "deadpoint") || strcmp(Parm[2], "dungeonevent") || strcmp(Parm[3], "statsapphire"))
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line4", "Error", 0x1000u);
fclose(Stream);
return;
}
if (Value[0] == -1 || Value[1] == -1 || Value[2] == -1 || Value[3] == -1)
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line4", "Error", 0x1000u);
fclose(Stream);
return;
}
DOUBLEMODE = Value[0];
DEADPOINT = Value[1];
DUNGEONEVENT = Value[2];
StatSapphire = Value[3];
BrItem = Value[4];
VSMode = Value[5];
TRANSLEVEL = Value[6];
if (TRANSLEVEL < 200 || TRANSLEVEL > 400)
TRANSLEVEL = 300;
// ================= Etc Settings =================
fgets(String, 255, Stream);
if (strcmp(String, "Etc Settings:\n"))
{
MessageBoxA(hWndMain, "not game server generated gameconfig.txt - Line5", "Error", 0x1000u);
fclose(Stream);
return;
}
for (int i = 0; i < 16; ++i)
{
Value[i] = -1;
memset(&Parm[i], 0, 0x20u);
}
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d %s %d %s %d %s %d",
Parm[0], sizeof(Parm[0]), &Value[0],
Parm[1], sizeof(Parm[1]), &Value[1],
Parm[2], sizeof(Parm[2]), &Value[2],
Parm[3], sizeof(Parm[3]), &Value[3],
Parm[4], sizeof(Parm[4]), &Value[4],
Parm[5], sizeof(Parm[5]), &Value[5]);
if (strcmp(Parm[0], "freeexp"))
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line6", "Error", 0x1000u);
fclose(Stream);
return;
}
if (Value[0] == -1)
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line6", "Error", 0x1000u);
fclose(Stream);
return;
}
FREEEXP = Value[0];
POTIONCOUNT = Value[1];
PARTYBONUS = Value[2];
GUILDBOARD = Value[3];
if (PARTYBONUS < 50 || PARTYBONUS > 200)
PARTYBONUS = 100;
// ================= Item Drop Bonus Settings =================
fgets(String, 255, Stream);
if (strcmp(String, "Item Drop Bonus Settings:\n"))
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line7", "Error", 0x1000u);
fclose(Stream);
return;
}
for (int m = 0; m < 4; m++)
{
fgets(String, 255, Stream);
sscanf_s(String, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
&Value[0], &Value[1], &Value[2], &Value[3],
&Value[4], &Value[5], &Value[6], &Value[7],
&Value[8], &Value[9], &Value[10], &Value[11],
&Value[12], &Value[13], &Value[14], &Value[15]);
for (int j = 0; j < 16; ++j)
{
if (Value[j] < 0 || Value[j] > 3000)
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - DropBonus", "Error", 0x1000u);
fclose(Stream);
return;
}
g_pDropBonus[m * 16 + j] = Value[j];
Value[j] = -1;
}
}
// ================= Treasure Settings =================
fgets(String, 255, Stream);
if (strcmp(String, "Treasure Settings:\n"))
{
MessageBoxA(hWndMain, "not game-server generated gameconfig.txt - Line12", "Error", 0x1000u);
fclose(Stream);
return;
}
memset(g_pTreasure, 0, sizeof(g_pTreasure));
for (int j = 0; j < 17; ++j)
{
STRUCT_TREASURE* Treasure = &g_pTreasure[j];
for (int i = 0; i < 26; i++)
Value[i] = -1;
fgets(String, 255, Stream);
sscanf_s(String,
"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"
" %d %d %d %d %d %d %d",
&Value[0],
&Value[1],
&Value[2],
&Value[3],
&Value[4],
&Value[5],
&Value[6],
&Value[7],
&Value[8],
&Value[9],
&Value[10],
&Value[11],
&Value[12],
&Value[13],
&Value[14],
&Value[15],
&Value[16],
&Value[17],
&Value[18],
&Value[19],
&Value[20],
&Value[21],
&Value[22],
&Value[23],
&Value[24],
&Value[25],
&Value[26],
&Value[27],
&Value[28],
&Value[29],
&Value[30],
&Value[31],
&Value[32],
&Value[33],
&Value[34],
&Value[35]);
if (!strncmp(String, "Rare", 4u))
break;
Treasure->Source = Value[0];
for (int i = 0; i < 5; ++i)
{
STRUCT_ITEM* TreasureItem = &Treasure->Target[i];
TreasureItem->sIndex = Value[7 * i + 1];
TreasureItem->stEffect[0].cEffect = Value[7 * i + 2];
TreasureItem->stEffect[0].cValue = Value[7 * i + 3];
TreasureItem->stEffect[1].cEffect = Value[7 * i + 4];
TreasureItem->stEffect[1].cValue = Value[7 * i + 5];
TreasureItem->stEffect[2].cEffect = Value[7 * i + 6];
TreasureItem->stEffect[2].cValue = Value[7 * i + 7];
}
fgets(String, 255, Stream);
sscanf_s(String, "%d %d %d %d %d", &Value[0], &Value[1], &Value[2], &Value[3], &Value[4]);
for (int i = 0; i < 5; ++i)
Treasure->Rate[i] = Value[i];
}
// ================= Rare Item Drop Settings =================
char Str[5][64]{};
if (strcmp(String, "Rare Item Drop Settings:\n"))
{
MessageBoxA(hWndMain, "not game server generated gameconfig.txt - Line29", "Error", 0x1000u);
fclose(Stream);
return;
}
memset(g_pRare, 0, sizeof(g_pRare));
for (int i = 0; i < 8; ++i)
{
STRUCT_RARE* Rare = &g_pRare[i];
STRUCT_ITEM* RareItem = &g_pRare[i].item;
fgets(String, 255, Stream);
sscanf_s(String, "%d %d %hd %hhu %hhu %hhu %hhu %hhu %hhu %s %d",
&Rare->MonsterFace,
&Rare->DropRate,
&RareItem->sIndex,
&RareItem->stEffect[0].cEffect,
&RareItem->stEffect[0].cValue,
&RareItem->stEffect[1].cEffect,
&RareItem->stEffect[1].cValue,
&RareItem->stEffect[2].cEffect,
&RareItem->stEffect[2].cValue,
Str[4], sizeof(Str[4]),
&Rare->Count);
}
for (int i = 0; i < 5; i++)
memset(Str[i], 0, sizeof(Str[i]));
RARESWITCH = 0;
bool Draw = false;
// ================= Game Option Settings =================
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d %s %d",
Str[0], sizeof(Str[0]),
&RARESWITCH,
Str[1], sizeof(Str[1]),
&STOPGOLDCOIN,
Str[2], sizeof(Str[2]),
&LOCALSERVER,
Str[3], sizeof(Str[3]),
&STOPQUEST);
fgets(String, 255, Stream);
int g_NonePKServer = *(int*)0xAACD54;
if (strcmp(String, "Game Option Settings:\n"))
{
g_NonePKServer = 0;
ITEMDESTROY = 100;
ITEMMASTER = 0;
DOUBLEZONE = 0;
Draw = true;
}
String[0] = 0;
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d %s %d %s %d",
Str[1], sizeof(Str[1]),
&g_NonePKServer,
Str[2], sizeof(Str[2]),
&GAMBLESERVER,
Str[3], sizeof(Str[3]),
&KHEPRAOPEN);
String[0] = 0;
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d %s %d %s %d",
Str[1], sizeof(Str[1]),
&ITEMDESTROY,
Str[2], sizeof(Str[2]),
&ITEMMASTER,
Str[3], sizeof(Str[3]),
&DOUBLEZONE);
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d",
Str[1], sizeof(Str[1]),
&USE_GUILDWAR_MANTLE,
Str[2], sizeof(Str[2]),
&USE_FREE_GAMBLE,
Str[3], sizeof(Str[3]),
&CASINOTICKET);
String[0] = 0;
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d %s %d %s %d %s %d",
Str[1], sizeof(Str[1]),
&LOTTOTICKET,
Str[2], sizeof(Str[2]),
&MAXLEVEL,
Str[3], sizeof(Str[3]),
&MAXLEVEL2,
Str[4], sizeof(Str[4]),
&CREATECHAR);
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d ",
Str[1], sizeof(Str[1]),
&USE8THSKILL,
Str[2], sizeof(Str[2]),
&MAXLEVELTICKET,
Str[3], sizeof(Str[3]),
&EventHour);
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d",
Str[1], sizeof(Str[1]),
&DUELLETTERLIMIT,
Str[2], sizeof(Str[2]),
&DUELLETTERLIMIT2);
memset(TownTax, 0, sizeof(TownTax));
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %I64d %s %I64d %s %I64d %s %I64d %s %I64d",
Str[0], sizeof(Str[0]),
&TownTax[0],
Str[1], sizeof(Str[1]),
&TownTax[1],
Str[2], sizeof(Str[2]),
&TownTax[2],
Str[3], sizeof(Str[3]),
&TownTax[3],
Str[4], sizeof(Str[4]),
&TownTax[4]);
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %d %s %d",
Str[1], sizeof(Str[1]),
&RANDOMQUIZ,
Str[2], sizeof(Str[2]),
&RandomQuizExp,
Str[2], sizeof(Str[3]),
&RandomQuizCoin);
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %d %s %d",
Str[1], sizeof(Str[1]),
&ITEMPRICE1, &ITEMPRICE2,
Str[2], sizeof(Str[2]),
&SEALOFSOUL);
String[0] = 0;
fgets(String, 255, Stream);
sscanf_s(String, "%s %d %s %I64d",
Str[1], sizeof(Str[1]), &NIGHTMARE,
Str[2], sizeof(Str[2]), &BLESSMONEY);
String[0] = 0;
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d", Str[1], sizeof(Str[1]), &ADDCRACKERROR);
String[0] = 0;
//if (fgets(String, 255, Stream))
// sscanf_s(String, "%s %d", Str[1], sizeof(Str[1]), &EncodeByte);
//String[0] = 0;
//if (fgets(String, 255, Stream))
//{
// sscanf_s(String, "%s %c %s %c", Str[1], sizeof(Str[1]), &cp, Str[2], sizeof(Str[2]), &aLogdemon);
// BLOCKEDIP = inet_addr(cp);
//}
String[0] = 0;
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d", Str[1], sizeof(Str[1]), &KINGDOMFIELD);
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d", Str[1], sizeof(Str[1]), &ITEMDELETEMODE);
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d", Str[1], sizeof(Str[1]), &GAMBLEMONEY);
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d", Str[1], sizeof(Str[1]), &CREATEHARDCHARACTER);
if (fgets(String, 255, Stream))
sscanf_s(String, "%s %d %s %d",
Str[0], sizeof(Str[0]),
&KhepraGuildKiller,
Str[1], sizeof(Str[1]),
&RuneZoneState);
fclose(Stream);
if (Draw)
{
GameConfig = 1;
DrawConfig(1);
}
}
void DrawConfig(int Draw)
{
int x = 0;
int y = 0;
int color = 255;
int BlackColor = 0;
if (GameConfig)
{
int g_NonePKServer = *(int*)0xAACD54;
HDC hdc = GetDC(hWndMain);
if (hdc)
{
int len = 0;
char String[256]{};
if (!hFont || SelectObject(hdc, hFont) != 0)
{
FILE* Stream = nullptr;
if (Draw)
fopen_s(&Stream, "gameconfig.txt", "wt");
y -= pMainWndProc.nPos;
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Drop Item Event Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
snprintf(String, 0x100u, " evindex %d evdelete %d evon %d evitem %d evrate %d evstart %d %d %d %d",
evIndex,
evDelete,
evOn,
evItem,
evRate,
evStartIndex,
evCurrentIndex,
evEndIndex,
evNotice);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Etc Event Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
snprintf(String, 0x100u, " double %d deadpoint %d dungeonevent %d statsapphire %d battleroyal %d VS: %d translevel: %d",
DOUBLEMODE,
DUNGEONEVENT,
DEADPOINT,
StatSapphire,
BrItem,
VSMode,
TRANSLEVEL);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Etc Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
snprintf(String, 0x100u, " freeexp %d potioncount %d partybonus %d guildboard %d",
FREEEXP,
POTIONCOUNT,
PARTYBONUS,
GUILDBOARD);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Item Drop Bonus Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
for (int i = 0; i < 4; ++i)
{
int pos = 16 * i;
snprintf(String, sizeof(String), " %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d",
g_pDropBonus[0 + pos], g_pDropBonus[1 + pos], g_pDropBonus[2 + pos], g_pDropBonus[3 + pos],
g_pDropBonus[4 + pos], g_pDropBonus[5 + pos], g_pDropBonus[6 + pos], g_pDropBonus[7 + pos],
g_pDropBonus[8 + pos], g_pDropBonus[9 + pos], g_pDropBonus[10 + pos], g_pDropBonus[11 + pos],
g_pDropBonus[12 + pos], g_pDropBonus[13 + pos], g_pDropBonus[14 + pos], g_pDropBonus[15 + pos]);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", String);
}
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Treasure Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
for (int j = 0; j < 16; ++j)
{
char Dest[256]{};
STRUCT_TREASURE* Treasure = &g_pTreasure[j];
snprintf(Dest, 0x100u, "%-4d ", g_pTreasure[j].Source);
for (int k = 0; k < 5; ++k)
{
STRUCT_ITEM* TreasureItem = &Treasure->Target[k];
snprintf(String, 0x100u,
" %-4d %2d %2d %2d %2d %2d %2d ",
TreasureItem->sIndex,
Treasure->Target[k].stEffect[0].cEffect,
Treasure->Target[k].stEffect[0].cValue,
Treasure->Target[k].stEffect[1].cEffect,
Treasure->Target[k].stEffect[1].cValue,
Treasure->Target[k].stEffect[2].cEffect,
Treasure->Target[k].stEffect[2].cValue);
strcat_s(Dest, String);
}
len = strlen(Dest);
TextOutA(hdc, x, y, Dest, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", Dest);
snprintf(String, 0x100u, " %-5d %-5d %-5d %-5d %-5d",
Treasure->Rate[0],
Treasure->Rate[1],
Treasure->Rate[2],
Treasure->Rate[3],
Treasure->Rate[4]);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
}
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Rare Item Drop Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
for (int i = 0; i < 8; ++i)
{
snprintf(String, 0x100u, "%-4d %-8d %-4d %-4d %-4d %-4d %-4d %-4d %-4d x %2d",
g_pRare[i].MonsterFace,
g_pRare[i].DropRate,
g_pRare[i].item.sIndex,
g_pRare[i].item.stEffect[0].cEffect,
g_pRare[i].item.stEffect[0].cValue,
g_pRare[i].item.stEffect[1].cEffect,
g_pRare[i].item.stEffect[1].cValue,
g_pRare[i].item.stEffect[2].cEffect,
g_pRare[i].item.stEffect[2].cValue,
g_pRare[i].Count);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
}
snprintf(String, 0x100u, "rare mode : %d StopGoldCoin: %d LocalServer : %d Stop Quest : %d",
RARESWITCH,
STOPGOLDCOIN,
LOCALSERVER,
STOPQUEST);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, color);
snprintf(String, 0x100u, "Game Option Settings:");
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
SetTextColor(hdc, BlackColor);
snprintf(String, 0x100u, "NonePKServer: %d GambleServer: %d KhepraOpen: %d", g_NonePKServer, GAMBLESERVER, KHEPRAOPEN);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "ItemDestroy: %d ItemMaster: %d EXP_NOT_DOUBLE_ZONE: %d",
ITEMDESTROY,
ITEMMASTER,
DOUBLEZONE);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "USE_GUILDWAR_MANTLE: %d USE_FREE_GAMBLE: %d casinoticket: %d",
USE_GUILDWAR_MANTLE,
USE_FREE_GAMBLE,
CASINOTICKET);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "lottoTicket: %d maxlevel: %d maxlevel2: %d createchar: %d", LOTTOTICKET, MAXLEVEL, MAXLEVEL2, CREATECHAR);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "8thskill: %d maxlevelticket: %d eventhour: %d", USE8THSKILL, MAXLEVELTICKET, EventHour);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "duelletterlimit: %d %d", DUELLETTERLIMIT, DUELLETTERLIMIT2);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "TownTax: %I64d %I64d %I64d %I64d %I64d",
TownTax[0],
TownTax[1],
TownTax[2],
TownTax[3],
TownTax[4]);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "randomquiz: %d exp:%d coin:%d", RANDOMQUIZ, RandomQuizExp, RandomQuizCoin);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "itemprice: %d %d sealofsoul:%d", ITEMPRICE1, ITEMPRICE2, SEALOFSOUL);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "nightmare: %d blessmoney: %I64d", NIGHTMARE, BLESSMONEY);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "addcrackerror: %d", ADDCRACKERROR);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
//if (Draw)
// fprintf(Stream, "%s\n", &String);
//snprintf(String, 0x100u, "encode %s", EncodeByte);
//len = strlen(String);
//TextOutA(hdc, x, y, String, len);
//y += 16;
//if (Draw)
// fprintf(Stream, "%s\n", &String);
//snprintf(String, 0x100u, "logdemon %s %s", cp, aLogdemon);
//len = strlen(String);
//TextOutA(hdc, x, y, String, len);
//y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "kingdomfield %d", KINGDOMFIELD);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "ItemDeleteMode %d", ITEMDELETEMODE);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "GameBleMoney %d", GAMBLEMONEY);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "CreateHardCharactor %d", CREATEHARDCHARACTER);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
snprintf(String, 0x100u, "KhepraGuild %d RuneGate %d", KhepraGuildKiller, RuneZoneState);
len = strlen(String);
TextOutA(hdc, x, y, String, len);
y += 16;
if (Draw)
fprintf(Stream, "%s\n", &String);
ReleaseDC(hWndMain, hdc);
if (Stream)
fclose(Stream);
}
}
}
}