Files
Client/CryptoSource/ScriptConvert-GSF File/ScriptConvert.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

357 lines
17 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);
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;
}
int _tmain(int argc, _TCHAR* argv[])
{
InitVersionInfo();
printf("\n<< Script Convert Ver %s >>\n", g_szCurrentVersion);
char szItemScriptTrashFile[MAX_PATH] = "ItemScript.jpg";
CItemMgr& ItemMgr = CItemMgr::GetInstance();
int nType = 0;
printf("\nSelect Number. (Quit : 0)");
printf("\n===========================================================");
printf("\n1 : Item Script Converting & Load Test");
printf("\n2 : Skillscript");
printf("\n2 : Monster proto");
printf("\n===========================================================");
printf("\n");
printf("\n");
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 (g_SkillMgr.LoadSkillsFromFile("SkillScript.txt") == false)
{
printf("Failed to load SkillScript.txt!\n");
getchar();getchar();
return -1;
}
if (g_SkillMgr.SaveSkillsToBinary("SkillScript.gsf", "SkillScript.jpg") == false)
{
printf("Failed to save SkillScript.gsf!\n");
printf("You sure you got write rights and SkillScript.jpg in this folder?!\n");
getchar();getchar();
return -1;
}
if (g_SkillMgr.LoadSkillsFromBinary("SkillScript.gsf") == false)
{
printf("Failed to load SkillScript.gsf!\n");
getchar();getchar();
return -1;
}
printf("Converting done.\n");
getchar();getchar();
break;
}
case 3:
{
if (g_MonsterMgr.LoadMonstersFromFile("MonsterProtoType.txt") == false)
{
printf("Failed to load MonsterProtoType.txt!\n");
getchar();getchar();
return -1;
}
if (g_MonsterMgr.SaveMonstersToBinary("MonsterProtoType.gsf", "MonsterProtoType.jpg") == false)
{
printf("Failed to save MonsterProtoType.gsf!\n");
printf("You sure you got write rights and MonsterProtoType.jpg in this folder?!\n");
getchar();getchar();
return -1;
}
if (g_MonsterMgr.LoadMonstersFromBinary("MonsterProtoType.gsf") == false)
{
printf("Failed to load MonsterProtoType.gsf!\n");
getchar();getchar();
return -1;
}
printf("Converting done.\n");
getchar();getchar();
break;
}
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();
// " ======================================================================================="
}