#include "stdafx.h" using namespace Item; enum SERVER_TYPE { SERVER_NORMAL = 1, SERVER_BATTLE = 2 }; #define MAX_VERSION_HISTORY 2000 // ÃÑ ¹öÀü ¶óÀμö char g_szCurrentVersion[10] = { 0, }; int g_nVersionLineCnt = 0; char g_szVersionInfo[MAX_VERSION_HISTORY][MAX_PATH] = { 0, }; void InitVersionInfo(void); void CreateVersionHistoryFile(const char* szFileName) { FILE* fp = fopen(szFileName, "wt"); if (fp) { fprintf(fp, "========================================================================================\n"); fprintf(fp, "Version History\n"); fprintf(fp, "----------------------------------------------------------------------------------------\n\n"); for (int i=0; im_SpriteData.m_szName, ItemMgr.GetItemInfo(nType)->m_StringData.m_szItemDescribe); } return true; } bool ChemicalScriptCheck(CItemMgr& ItemMgr) { while (true) { ChemicalInfo chemicalInfo; printf("\n"); printf("Source Item ID (0 - Quit) : "); scanf("%d", &chemicalInfo.m_wPickkingItemID); if (0 == chemicalInfo.m_wPickkingItemID) { break; } printf("Quantity of Source Item (0 - Quit) : "); scanf("%d", &chemicalInfo.m_cPickkingItemNum); if (0 == chemicalInfo.m_cPickkingItemNum) { break; } printf("Compensatory Item ID (0 - Quit) : "); scanf("%d", &chemicalInfo.m_wTargetItemID); if (0 == chemicalInfo.m_wTargetItemID) { break; } printf("Quantity of Compensatory Item (0 - Quit) : "); scanf("%d", &chemicalInfo.m_cTargetItemNum); if (0 == chemicalInfo.m_cTargetItemNum) { break; } switch (ItemMgr.GetChemicalResult(chemicalInfo)) { case Chemical::S_SUCCESS: { const ItemInfo* lpPickkingItem = ItemMgr.GetItemInfo(chemicalInfo.m_wPickkingItemID); if (NULL == lpPickkingItem) { printf("Irregular Source Item. Item ID : %d", chemicalInfo.m_wPickkingItemID); break; } const ItemInfo* lpTargetItem = ItemMgr.GetItemInfo(chemicalInfo.m_wTargetItemID); if (NULL == lpTargetItem) { printf("Irregular Source Item. ItemI D : %d", chemicalInfo.m_wTargetItemID); break; } const ItemInfo* lpResultItem = ItemMgr.GetItemInfo(chemicalInfo.m_wResultItemID); if (NULL == lpResultItem) { printf("Irregular Source Item. ItemI D : %d", chemicalInfo.m_wResultItemID); break; } printf("Source Item : %s %d \nCompensatory Item : %s %d \ncompensate Item : %s %d ", lpPickkingItem->m_SpriteData.m_szName, chemicalInfo.m_cPickkingItemNum, lpTargetItem->m_SpriteData.m_szName, chemicalInfo.m_cTargetItemNum, lpResultItem->m_SpriteData.m_szName, chemicalInfo.m_cResultItemNum); break; } case Chemical::F_WRONG_RECIPE: printf("Irregular compensation method."); break; case Chemical::F_NOT_ENOUGH_ITEM: printf("Not enough Compensatory Item."); break; case Chemical::F_WRONG_RATE: printf("There are remaings of Compensatory Item number. Regulate compensation rate."); break; } } return true; } bool SkillScriptCheck(CSkillMgr& SkillMgr) { while (true) { int nType = 0; printf("\nInput Skills Hexadecimal ID. (0 - Quit) : "); scanf("%x", &nType); if (0 == nType) { break; } if (0 == SkillMgr.GetSkillProtoType(nType)) { printf("Can't find the Skill which is ID No.0x%x.", nType); continue; } printf("Skill Name : %s\n", SkillMgr.GetSkillProtoType(nType)[0].m_SpriteInfo.m_szName); printf("Skill Name : %s\n", SkillMgr.GetSkillProtoType(nType)[1].m_SpriteInfo.m_szName); printf("Skill Name : %s\n", SkillMgr.GetSkillProtoType(nType)[2].m_SpriteInfo.m_szName); printf("Skill Name : %s\n", SkillMgr.GetSkillProtoType(nType)[3].m_SpriteInfo.m_szName); printf("Skill Name : %s\n", SkillMgr.GetSkillProtoType(nType)[4].m_SpriteInfo.m_szName); } return true; } bool MonsterScriptCheck(CMonsterMgr& MonsterMgr) { while (true) { int nType = 0; printf("\nInput the Monsters ID.(0 - Quit) : "); scanf("%d", &nType); if (0 == nType) { break; } if (0 == MonsterMgr.GetMonsterProtoType(nType)) { printf("Can't find the Monster which is ID No.%d.", nType); continue; } printf("Monster Name : %s\n", MonsterMgr.GetMonsterProtoType(nType)->m_MonsterInfo.m_strName); } return true; } bool FilterScriptCheck(void) { while (true) { char szText[Filter::MAX_FILTER_LEN]; printf("\nInput word what you want check. (0 - Quit) : "); scanf("%s", szText); if (0 == strcmp("0", szText)) { break; } if (false == Filter::NameCheck(szText)) { printf("'%s' is abusive word.", szText); } else { printf("'%s' is not abusive word.", szText); } } return true; } int InputZoneNumber(void) { while (true) { int nZone = 0; printf("\nInput ZONE number. (0 - Quit) : "); scanf("%d", &nZone); return nZone; } return 0; } bool MineralVeinScriptCheck(CMineralVeinMgr& MineralVeinMgr) { while (true) { char szTempBuf[ MAX_PATH ]; unsigned long dwVeinColor; printf("\nInput COLOR number of the mineral vein. (Ex - 0x12345678, 0 - Quit) : "); scanf("%s", szTempBuf); if ( 0 == stricmp(szTempBuf, "0") ) { break; } dwVeinColor = Math::Convert::Atoi(szTempBuf); if (0 == MineralVeinMgr.GetMineralVein(dwVeinColor)) { printf("Can't find the mineral vein which is number %s.", szTempBuf); continue; } MineralVeinInfo* lpVeinInfo = MineralVeinMgr.GetMineralVein(dwVeinColor); if ( lpVeinInfo ) { printf("Mineral veins Name : %s\tColor : %s\tMax Fertility : %d\tMineral Qty. : %d\n\n", lpVeinInfo->m_szVeinName, szTempBuf, lpVeinInfo->m_dwMaxFertility, lpVeinInfo->m_lstMineralInfo.size()); while (true) { int iMineral = 0; printf("Input MINERAL number. (0 - Quit) : "); scanf("%d", &iMineral); if (0 == iMineral) { return true; } bool bExist = false; MineralInfoList::iterator itr = lpVeinInfo->m_lstMineralInfo.begin(); MineralInfoList::iterator end = lpVeinInfo->m_lstMineralInfo.end(); while ( itr != end ) { const MineralInfo& mineralInfo = (*itr); if ( mineralInfo.m_dwMineralID == iMineral ) { bExist = true; printf("Mineral : %d\tMin Abstraction : %d\tMax Abstraction : %d\n", mineralInfo.m_dwMineralID, mineralInfo.m_cMin, mineralInfo.m_cMax); } ++itr; } if ( !bExist ) { printf("Can't find the mineral which is number %d.\n", iMineral); } } } } return true; } bool LotteryEventCheck(CGameEventMgr& GameEventMgr) { while (true) { int nType = 0; printf("\nInput Event drop Item number. (0 - Quit) : "); scanf("%d", &nType); if (0 == nType) { break; } CLotteryEvent& LotteryEvent = GameEventMgr.GetLotteryEvent(); Item::CItem* lpItem = LotteryEvent.PrizeLottery(nType); if (NULL == lpItem) { printf("LOSE! (Boom!)"); continue; } printf("Prize Name : %s, Prize Qty. : %d\n", lpItem->GetItemInfo().m_SpriteData.m_szName, lpItem->GetNumOrDurability()); } return true; } int _tmain(int argc, _TCHAR* argv[]) { InitVersionInfo(); printf("\n<< Script Convert Ver %s >>\n", g_szCurrentVersion); char szItemScriptTrashFile[MAX_PATH] = "ItemScript.jpg"; char szChemicalScriptTrashFile[MAX_PATH] = "Chemical.jpg"; char szCompensationScriptTrashFile[MAX_PATH] = "SpeacialCompensation.jpg"; char szSkillScriptTrashFile[MAX_PATH] = "SkillScript.jpg"; char szMonsterScriptTrashFile[MAX_PATH] = "MonsterScript.jpg"; char szAbuseTrashFile[MAX_PATH] = "Abuse.jpg"; char szMineralVeinScriptTrashFile[MAX_PATH] = "MineralVeinScript.jpg"; CItemMgr& ItemMgr = CItemMgr::GetInstance(); CSkillMgr& SkillMgr = CSkillMgr::GetInstance(); CMonsterMgr& MonsterMgr = CMonsterMgr::GetInstance(); CGameEventMgr& GameEventMgr = CGameEventMgr::GetInstance(); CMineralVeinMgr& MineralVeinMgr = CMineralVeinMgr::GetInstance(); int nType = 0; printf("\nSelect Number. (Quit : 0)"); printf("\n==========================================================="); printf("\n1 : Item Script Converting & Load Test"); printf("\n2 : Chemical Script Converting & Load Test"); printf("\n3 : SpeacialCompensation Script Converting & Load Test"); printf("\n4 : Skill Converting & Load Test"); printf("\n5 : MonsterProtoType Script Converting & Load Test"); printf("\n6 : Abusement Converting & Load Test"); printf("\n7 : Mineral Vein Script Converting & Load Test"); printf("\n"); printf("\n8 : Check Item Price by Item Script Tab File"); printf("\n9 : Check Item Price by Item Script Binary File"); printf("\n10 : Check Integrity of Lottery Event Script"); printf("\n"); printf("\n17 : Mineral Vein Script UnPack"); printf("\n"); printf("\n100 : Verify Latest Version of ScriptConverter"); printf("\n200 : Create Info File of ScriptConverter."); printf("\n==========================================================="); printf("\n"); printf("\n¡ØNote : You MUST TEST CONVERTED FILE after sciprt converting!!"); START: printf("\n? "); scanf("%d", &nType); switch (nType) { case 0: break; case 1: { SERVER_TYPE serverType = GetCurrentItemScript(); if (false == ItemMgr.LoadItemProtoType((SERVER_BATTLE == serverType) ? "BGItemScript.txt" : "ItemScript.txt")) { printf("Failed to ItemScipt file loading!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.SaveItemProtoTypeBinary((SERVER_BATTLE == serverType) ? "BGItemScript.gsf" : "ItemScript.gsf", szItemScriptTrashFile)) { printf("Failed to ItemScipt file saving!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.LoadItemProtoTypeBinary((SERVER_BATTLE == serverType) ? "BGItemScript.gsf" : "ItemScript.gsf")) { printf("Failed to ItemScipt reloading!\n"); getchar();getchar(); return -1; } if (false == ItemScriptCheck(ItemMgr)) { printf("Irregular ItemScript. Check script Please.\n"); getchar();getchar(); return -1; } /*ItemMgr.PrintDropListByLevel(); ItemMgr.PrintRingDropListByLevel(); ItemMgr.PrintNecklaceDropListByLevel(); ItemMgr.PrintRuneDropListByLevel();*/ printf("Success to ItemScript converting.\n"); getchar();getchar(); break; } case 2: { // ¾ÆÀÌÅÛ ±âº» Á¤º¸¸¦ ¸ÕÀú ·ÎµùÇØ¾ßÇÑ´Ù. if (false == ItemMgr.LoadItemProtoType((SERVER_BATTLE == GetCurrentItemScript()) ? "BGItemScript.txt" : "ItemScript.txt")) { printf("Failed to ItemScipt file loading!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.LoadItemChemical("Chemical.txt")) { printf("Failed to Chemical Script loading!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.SaveItemChemicalBinary("Chemical.gsf", szChemicalScriptTrashFile)) { printf("Failed to Chemical Scipt file saving!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.LoadItemChemicalBinary("Chemical.gsf")) { printf("Failed to Chemical Scipt reloading!\n"); getchar();getchar(); return -1; } if (false == ChemicalScriptCheck(ItemMgr)) { printf("Irregular Chemical Script. Check script Please.\n"); getchar();getchar(); return -1; } printf("Success to Chemical Script converting.\n"); getchar();getchar(); break; } case 3: { // ¾ÆÀÌÅÛ ±âº» Á¤º¸¸¦ ¸ÕÀú ·ÎµùÇØ¾ßÇÑ´Ù. if (false == ItemMgr.LoadItemProtoType((SERVER_BATTLE == GetCurrentItemScript()) ? "BGItemScript.txt" : "ItemScript.txt")) { printf("Failed to ItemScipt file loading!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.LoadItemSpeacialCompensation("SpeacialCompensation.txt")) { printf("Failed to SpeacialCompensation Script file loading!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.SaveItemSpeacialCompensationBinary("SpeacialCompensation.gsf", szCompensationScriptTrashFile)) { printf("Failed to SpeacialCompensation Script file saving!\n"); getchar();getchar(); return -1; } if (false == ItemMgr.LoadItemSpeacialCompensationBinary("SpeacialCompensation.gsf")) { printf("Failed to SpeacialCompensation Script file reloading!\n"); getchar();getchar(); return -1; } // Rodin : º¸»ó ½ºÅ©¸³Æ® üũ ·çƾ /* if (false == CompensationScriptCheck(ItemMgr)) { printf("Irregular Compensation Script. Check script Please.\n"); getchar();getchar(); return -1; } */ printf("Success to Chemical Script converting.\n"); getchar();getchar(); break; } case 4: { if (false == SkillMgr.LoadSkillsFromFile("SkillScript.txt")) { printf("Failed to Skill Scipt file loading!\n"); getchar();getchar(); return -1; } if (false == SkillMgr.SaveSkillsToBinary("SkillScript.gsf", szSkillScriptTrashFile)) { printf("Failed to Skill Scipt file saving!\n"); getchar();getchar(); return -1; } if (false == SkillMgr.LoadSkillsFromBinary("SkillScript.gsf")) { printf("Failed to Skill Scipt file reloading!\n"); getchar();getchar(); return -1; } if (false == SkillScriptCheck(SkillMgr)) { printf("Irregular Skill Script. Check script Please.\n"); getchar();getchar(); return -1; } printf("Success to Skill Script converting.\n"); getchar();getchar(); break; } case 5: { if (false == MonsterMgr.LoadMonstersFromFile("MonsterProtoType.txt")) { printf("Failed to MonsterProtoType Scipt file loading!\n"); getchar();getchar(); return -1; } if (false == MonsterMgr.SaveMonstersToBinary("MonsterProtoType.gsf", szMonsterScriptTrashFile)) { printf("Failed to MonsterProtoType Scipt file saving!\n"); getchar();getchar(); return -1; } if (false == MonsterMgr.LoadMonstersFromBinary("MonsterProtoType.gsf")) { printf("Failed to MonsterProtoType Scipt file reloading!\n"); getchar();getchar(); return -1; } if (false == MonsterScriptCheck(MonsterMgr)) { printf("Irregular MonsterProtoType Script. Check script Please.\n"); getchar();getchar(); return -1; } printf("Success to MonsterProtoType Script converting.\n"); getchar();getchar(); break; } case 6: { if (false == Filter::InitFilter("Abuse.txt")) { printf("Failed to Abusement Scipt file loading!\n"); getchar();getchar(); return -1; } if (false == Filter::SaveFilterDBToBinary("script1.gsf", szAbuseTrashFile)) { printf("Failed to Abusement Scipt file saving!\n"); getchar();getchar(); return -1; } if (false == Filter::LoadFilterDBFromBinary("script1.gsf")) { printf("Failed to Abusement Scipt file reloading!\n"); getchar();getchar(); return -1; } if (false == FilterScriptCheck()) { printf("Irregular Abusement Script. Check script Please.\n"); getchar();getchar(); return -1; } printf("Success to Abusement Script converting.\n"); getchar();getchar(); break; } case 7: { int nZone = InputZoneNumber(); if (0 == nZone) { return -1; } char szFileName[ MAX_PATH ]; sprintf(szFileName, "MineralVein%d.txt", nZone); if (false == MineralVeinMgr.LoadMineralVeinsFromFiles(szFileName)) { printf("Failed to Mineral Vein Scipt file loading!\n"); getchar();getchar(); return -1; } // ÆÄÀÏ¸í º¯°æ strtok(szFileName, "."); strcat(szFileName, ".gsf"); if (false == MineralVeinMgr.SaveMineralVeinsToBinary(szFileName, szMineralVeinScriptTrashFile)) { printf("Failed to Mineral Vein Scipt file saving!\n"); getchar();getchar(); return -1; } // ÃʱâÈ­ ÈÄ¿¡ Àç·Îµå MineralVeinMgr.Destroy(); MineralVeinMgr.Initialize(); if (false == MineralVeinMgr.LoadMineralVeinsFromBinary(szFileName)) { printf("Failed to Mineral Vein Scipt file reloading!\n"); getchar();getchar(); return -1; } if (false == MineralVeinScriptCheck(MineralVeinMgr)) { printf("Irregular Mineral Vein Script. Check script Please.\n"); getchar();getchar(); return -1; } printf("Success to Mineral Vein Script converting.\n"); getchar();getchar(); break; } case 8: { if (false == ItemMgr.LoadItemProtoType((SERVER_BATTLE == GetCurrentItemScript()) ? "BGItemScript.txt" : "ItemScript.txt")) { printf("Failed to Scipt file loading!\n"); return -1; } break; } case 9: { if (false == ItemMgr.LoadItemProtoTypeBinary((SERVER_BATTLE == GetCurrentItemScript()) ? "BGItemScript.gsf" : "ItemScript.gsf")) { printf("Failed to Scipt file loading!\n"); return -1; } break; } case 10: { if (false == ItemMgr.LoadItemProtoType((SERVER_BATTLE == GetCurrentItemScript()) ? "BGItemScript.txt" : "ItemScript.txt")) { printf("Failed to ItemScipt file loading!\n"); getchar();getchar(); return -1; } if (false == GameEventMgr.Initialize("LotteryEvent.txt")) { printf("Irregular Lottery Event Script! Check script Please.\n"); return -1; } LotteryEventCheck(GameEventMgr); break; } case 17: { int nZone = InputZoneNumber(); if (0 == nZone) { return -1; } char szFileName[ MAX_PATH ]; sprintf(szFileName, "MineralVein%d.gsf", nZone); if (false == MineralVeinMgr.LoadMineralVeinsFromBinary(szFileName)) { printf("Failed to Mineral Vein Scipt file reloading!\n"); getchar();getchar(); return -1; } // ÆÄÀÏ¸í º¯°æ strtok(szFileName, "."); strcat(szFileName, ".txt"); if (false == MineralVeinMgr.SaveMineralVeinsToText(szFileName)) { printf("Failed to Mineral Vein Scipt file saving!\n"); getchar();getchar(); return -1; } printf("Success to Mineral Vein Script UnPack.\n"); getchar();getchar(); break; } case 100: { char szVersionInfo[ 65535 ] = ""; for (int i=0; i= MAX_VERSION_HISTORY) { \ MessageBox(NULL, "VERSION ERROR : Input higher number of MAX_VERSION_HISTORY.", "Error", MB_OK); \ exit(0); \ } // ¸Þ´º¿¡ Ç¥½ÃµÉ ÃֽйöÀü Á¤º¸ strcpy(g_szCurrentVersion, "1.39"); // ÃֽйöÀüÀÇ ¶óÀμö g_nVersionLineCnt = 2; // "========================================================================================" // "Version History" // "----------------------------------------------------------------------------------------" // int nLine = 0; strcpy(g_szVersionInfo[nLine], " - 1.39 (2006-06-19)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ItemType¿¡ GEM_SELL ŸÀÔ Ãß°¡(±¸¸Å/ÆÇ¸Å°¡ µ¿ÀÏ ¾ÆÀÌÅÛ) " ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.38 (2006-04-26)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : 3Â÷ ¹ë·±½º ÆÐÄ¡ / S ±×·¹ÀÌµå ¾ÆÀÌÅÛ Ãß°¡·Î ÀÎÇÑ ¸®ºôµå " ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.37 (2005-10-31)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : ±¹°¡Àü ¼®»ó ¸®½ºÆù °¡´É ¿©ºÎ Ä÷³ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.36 (2005-07-20)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : SKILL_ITEM ŸÀÔ(¿¬°áµÈ ½ºÅ³ÀÇ È¿°ú¸¦ ¹ßÈÖÇÏ´Â ¾ÆÀÌÅÛ) Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : LinkQID Ä÷³ »èÁ¦" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ForStatueWar, LimitRealmPoint Ä÷³ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.35 (2005-07-15)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : ¼®»ó È¿°ú ŸÀÔ, ¼®»ó È¿°ú ÆÛ¼¾Æ® ÅÇ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.34 (2005-07-08)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : FIXED_PORTAL ŸÀÔ(±Íȯ À§Ä¡ °íÁ¤Çü ±Íȯ¼­) Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.33 (2005-04-12)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ÇÁ·ÎÅäŸÀÔ ½ºÅ©¸³Æ® : Guard ŸÀÔ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.32 (2005-03-18)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ±¤¹° ¹èÄ¡ ½ºÅ©¸³Æ® : ±¤¸Æ À̸§ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.31 (2005-02-25)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : LinkQID Ä÷³ Ãß°¡ (»ç¿ë¾ÆÀÌÅÛ¸¸ Àû¿ë)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.30 (2005-02-24)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ÇÁ·Î±×·¥ ¿µ¹®È­ (È÷½ºÅ丮 Á¦¿Ü)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.29 (2005-02-23)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : AbleExchangeAndDrop, AbleSell Ä÷³ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.28 (2005-02-23)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : ¸ó½ºÅÍ À̸§ ÃÖ´ë±æÀ̸¦ 32 ¹ÙÀÌÆ®¿¡¼­ 64 ¹ÙÀÌÆ®·Î ´Ã¸²" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¹öÀü Á¤º¸ È®ÀÎ ±â´É Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.27 (2005-02-17)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ·é, ¾Ç¼¼»ç¸® Ãß°¡ ¼öÁ¤" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : ·é, ¾Ç¼¼»ç¸® µå¶ø·ü ÅÇ Ãß°¡ ¼öÁ¤, µå¶ø·ü ´ÜÀ§ Áõ°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.26 (2005-02-15)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ·é, ¾Ç¼¼»ç¸®¿Í °ü·ÃµÈ ·çƾ Ãß°¡·Î ÀçÄÁ¹öÆÃ ÇÊ¿ä" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : ·é, ¾Ç¼¼»ç¸® µå¶ø·ü ÅÇ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.25 (2005-02-14)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + º¹±Ç ½ºÅ©¸³Æ® : ·Îµù½Ã ¹ö±× ¼öÁ¤ ¹× °ü·Ã ·Î±× Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.24 (2005-01-20)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ½ºÅ³ ½ºÅ©¸³Æ® : ¼Ò¼È ¾×¼Ç °ü·Ã ³»¿ë Ãß°¡ (ŸÀÔ Ãß°¡)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ º¸»ó ½ºÅ©¸³Æ® : ¾ÆÀÌÅÛ Å¸ÀÔÀÇ Áõ°¡·Î ÀÎÇØ ÀçÄÁ¹öÆÃ ÇÊ¿ä" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.23 (2005-01-20)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ±¤¹° ¹èÄ¡ ½ºÅ©¸³Æ® : ¹®ÀÚ¿­ óÀ½ºÎºÐ¿¡ ÀÖ´Â Tab ¹®ÀÚ Á¦°Å ±â´É Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.22 (2005-01-06)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ¿ùµå¿þÆù ½ºÅ¸ÅÍŶ 2°³, ±¤¹° ¸Å¸³·® È®ÀΠŶ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.21 (2004-12-29)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : '¾ÆÀÌÅÛ µå¶ø °³¼± °èȹ'¿¡ µû¶ó µå¶ø °ü·Ã ¿­ Ãß°¡/¼öÁ¤" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.20 (2004-12-21)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ±¤¹° ¹èÄ¡ ½ºÅ©¸³Æ® : Trash ÆÄÀÏÀ» ½ºÅ©¸³Æ®¿¡ ³Ö¾îÁÖµµ·Ï º¯°æ" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.19 (2004-12-16)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ½ºÅ³ ½ºÅ©¸³Æ® : Counter ¿­ Ãß°¡ (Ä«¿îÅ͸¦ ´çÇÒ ¼ö ÀÖ´ÂÁö ¿©ºÎ)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.18 (2004-12-16)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + »õ·Î¿î ½ºÅ³ ŸÀÔÀ¸·Î SET Ãß°¡ (æƮ/ÀÎæƮÀÇ Ãß°¡ È¿°ú ½ºÅ³)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ½ºÅ³ ½ºÅ©¸³Æ® üũ ·çƾ ÀÔ·Â ¹æ½Ä º¯°æ (10Áø¼ö -> 16Áø¼ö)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.17 (2004-12-15)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ±¤¹° ¹èÄ¡ ½ºÅ©¸³Æ® ÄÁ¹öÆÃ ±â´É Ãß°¡ (MineralVein?.gsf)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.16 (2004-11-23)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¿å¼³ ½ºÅ©¸³Æ® ¿øº» Àоî¿À´Â °æ·Î¸¦ ¼öÁ¤" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.15 (2004-11-17)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + æƮ/ÀÎæƮ Ç÷¡±×°¡ ¼öÁ¤µÇ¾î¼­ ¸ó½ºÅÍ ½ºÅ©¸³Æ® ÄÁ¹öÆÃÀ» ´Ù½Ã ÇØ¾ßÇÕ´Ï´Ù." ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.14 (2004-09-21)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + º¹±Ç À̺¥Æ® ½ºÅ©¸³Æ® ·ÎµùÀ» ÇöÀç Æú´õ¿¡¼­ ÇϰԲû ¼öÁ¤" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.13 (2004-09-02)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + FightStatus°¡ ¼öÁ¤µÇ¼­ ¸ó½ºÅÍ ½ºÅ©¸³Æ® ÄÁ¹öÆÃÀ» ´Ù½Ã ÇØ¾ßÇÕ´Ï´Ù." ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.12 (2004-08-13)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ º¸»ó ½ºÅ©¸³Æ® Ãß°¡ (SpeacialCompensation.txt)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.11 (2004-08-10)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ¾ÆÀÌÅÛ Äù½ºÆ®¸¦ À§ÇÑ Äù½ºÆ® ID ¿­ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.10 (2004-07-21)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : LOD ¿©ºÎ ¿­ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.09 (2004-07-14)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : Ç÷¡±×°ª ¼öÁ¤ (Item::DetailData::Flags Âü°í)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.08 (2004-07-07)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : ¸ó½ºÅÍ ·¹º§º°·Î ¶³±¸´Â ¾ÆÀÌÅÛ ¸ñ·Ï(±âȹ Âü°í¿ë) ÀÛ¼º ±â´É Ãß°¡ "); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.07 (2004-06-18)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ½ºÅ³ ½ºÅ©¸³Æ® : mRange, LockAdd ¿­ Ãß°¡. DRC ¿­ »èÁ¦" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.06 (2004-06-17)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸ó½ºÅÍ ½ºÅ©¸³Æ® : Àåºñ µå¶ø È®·üÀÌ ±×·¹À̵庰·Î ¼¼ºÐÈ­µÊ " ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.05 (2004-06-16)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¾ÆÀÌÅÛ ½ºÅ©¸³Æ® : OptionPrice ¿­ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.04 (2004-06-09)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¸®¹ë·±½Ì¿ëÀ¸·Î ¾ÆÀÌÅÛ/¸ó½ºÅÍ ½ºÅ©¸³Æ® ´ëÆø ¼öÁ¤" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.03" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + °ø¼º ¿ÀºêÁ§Æ® ¸ó½ºÅÍ ÇÁ·ÎÅä ŸÀÔ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + °ø¼º ¿ÀºêÁ§Æ®¿¡ ÇÊ¿äÇÑ ¿­ Ãß°¡ (¸¶Áö¸· 13°³)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.02" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + °ø¼º ¿ÀºêÁ§Æ®¸¦ À§ÇØ ÀÎæƮ/æƮ ¹«½Ã¿©ºÎ Á¤º¸¸¦ ¸ó½ºÅÍ ÇÁ·ÎÅä ŸÀÔ¿¡ Ãß°¡" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.01" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + °ø¼º ¾ÆÀÌÅÛ Ãß°¡ (½ºÅ¸ÅÍŶ 4°³)" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " - 1.00" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + ¹öÀü ³Ñ¹ö¸µ ½ÃÀÛ" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], " + Ä¡ÇÁ ¸ó½ºÅÍ Ãß°¡¿¡ ´õºÒ¾î ¹èÆ÷" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "" ); ADD_LINE(); strcpy(g_szVersionInfo[nLine], "End" ); ADD_LINE(); // " =======================================================================================" }