Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
944 lines
31 KiB
C++
944 lines
31 KiB
C++
#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; i<MAX_VERSION_HISTORY; ++i)
|
|
{
|
|
if (0 == stricmp(g_szVersionInfo[i], "End"))
|
|
{
|
|
// 마지막 라인이면 그만
|
|
break;
|
|
}
|
|
|
|
fprintf(fp, "%s\n", g_szVersionInfo[i]);
|
|
}
|
|
|
|
fprintf(fp, "========================================================================================\n");
|
|
fclose(fp);
|
|
|
|
printf("Complete Version History file creating.\n");
|
|
}
|
|
else
|
|
{
|
|
printf("Failed %s file creating.\n");
|
|
}
|
|
}
|
|
|
|
SERVER_TYPE GetCurrentItemScript(void)
|
|
{
|
|
int nSelect = 0;
|
|
|
|
while (true)
|
|
{
|
|
printf("Type of ItemScript (1 -ROW Online , 2 -Battle Lohan) : ");
|
|
scanf("%d", &nSelect);
|
|
|
|
if (1 == nSelect)
|
|
{
|
|
return SERVER_NORMAL;
|
|
}
|
|
|
|
if (2 == nSelect)
|
|
{
|
|
return SERVER_BATTLE;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool ItemScriptCheck(CItemMgr& ItemMgr)
|
|
{
|
|
while (true)
|
|
{
|
|
int nType = 0;
|
|
|
|
printf("\nInput Items ID. (0 - Quit) : ");
|
|
scanf("%d", &nType);
|
|
|
|
if (0 == nType) { break; }
|
|
|
|
if (0 == ItemMgr.GetItemInfo(nType))
|
|
{
|
|
printf("Can't find the Item which is ID No.%d ", nType);
|
|
continue;
|
|
}
|
|
|
|
printf("Item Name : %s Note : %s\n", ItemMgr.GetItemInfo(nType)->m_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<g_nVersionLineCnt; ++i)
|
|
{
|
|
strcat(szVersionInfo, g_szVersionInfo[i]);
|
|
strcat(szVersionInfo, "\n");
|
|
}
|
|
|
|
MessageBox(NULL, szVersionInfo, "ScriptConvert Version Info", MB_OK);
|
|
goto START;
|
|
}
|
|
|
|
case 200:
|
|
{
|
|
CreateVersionHistoryFile("Version History.txt");
|
|
goto START;
|
|
}
|
|
|
|
default:
|
|
{
|
|
printf("It is wrong number.\n");
|
|
getchar();getchar();
|
|
goto START;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void InitVersionInfo(void)
|
|
{
|
|
#define ADD_LINE() \
|
|
++nLine; \
|
|
if (nLine >= 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();
|
|
// " ======================================================================================="
|
|
} |