diff --git a/.idea/editor.xml b/.idea/editor.xml
index 226ca24..ec90224 100644
--- a/.idea/editor.xml
+++ b/.idea/editor.xml
@@ -1,580 +1,247 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
\ No newline at end of file
diff --git a/src/db/src/ClientManagerBoot.cpp b/src/db/src/ClientManagerBoot.cpp
index f3488f6..8a9bfe6 100644
--- a/src/db/src/ClientManagerBoot.cpp
+++ b/src/db/src/ClientManagerBoot.cpp
@@ -571,32 +571,34 @@ bool CClientManager::InitializeQuestItemTable()
bool CClientManager::InitializeItemTable()
{
- //================== 함수 설명 ==================//
- //1. 요약 : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' 파일을 읽고,
- // (TItemTable), 오브젝트를 생성한다.
- //2. 순서
- // 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다.
- // 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로
- // (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다.
- // 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로
- // (!)[item_table], 을 만든다.
- // <참고>
- // 각 row 들 중,
- // (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는
- // (b)[test_map_itemTableByVnum]의 것을 사용한다.
- // 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다.
- //3. 테스트
- // 1)'item_proto.txt' 정보가 item_table에 잘 들어갔는지. -> 완료
- // 2)'item_names.txt' 정보가 item_table에 잘 들어갔는지.
- // 3)'item_proto_test.txt' 에서 [겹치는] 정보가 item_table 에 잘 들어갔는지.
- // 4)'item_proto_test.txt' 에서 [새로운] 정보가 item_table 에 잘 들어갔는지.
- // 5) (최종) 게임 클라이언트에서 제대로 작동 하는지.
+ // TODO Rework this in order to load multiple locales
+ //================== Function Description ==================//
+ // 1. Summary: Reads the files 'item_proto.txt', 'item_proto_test.txt', and 'item_names.txt',
+ // and generates (TItemTable), objects.
+ // 2. Procedure:
+ // 1) Read the 'item_names.txt' file to create
+ // (a) [localMap] (vnum:name) map.
+ // 2) Use 'item_proto_test.txt' and the (a) [localMap]
+ // to generate (b) [test_map_itemTableByVnum] (vnum:TItemTable) map.
+ // 3) Use 'item_proto.txt' and the (a) [localMap]
+ // to create (!) [item_table] and .
+ //
+ // Among the rows,
+ // for those existing in both (b) [test_map_itemTableByVnum] and (!) [item_table],
+ // use the row from (b) [test_map_itemTableByVnum].
+ // 4) Add any rows in (b) [test_map_itemTableByVnum] that are not in (!) [item_table].
+ // 3. Testing:
+ // 1) Check whether data from 'item_proto.txt' has been correctly entered into item_table. -> Done
+ // 2) Check whether data from 'item_names.txt' has been correctly entered into item_table.
+ // 3) Check whether [overlapping] data from 'item_proto_test.txt' has been correctly entered into item_table.
+ // 4) Check whether [new] data from 'item_proto_test.txt' has been correctly entered into item_table.
+ // 5) (Final) Verify that it works correctly in the game client.
//_______________________________________________//
//=================================================================================//
- // 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다.
+ // 1) Read the 'item_names.txt' file to create (a) [localMap] (vnum:name) map.
//=================================================================================//
bool isNameFile = true;
map localMap;
@@ -614,11 +616,11 @@ bool CClientManager::InitializeItemTable()
//_________________________________________________________________//
//=================================================================//
- // 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로
- // (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다.
+ // 2) Using the 'item_proto_test.txt' file and the (a) [localMap] map,
+ // generate the (b) [test_map_itemTableByVnum] (vnum:TItemTable) map.
//=================================================================//
map test_map_itemTableByVnum;
- //1. 파일 읽어오기.
+ // 1. Read the file.
cCsvTable test_data;
if(!test_data.Load("item_proto_test.txt",'\t'))
{
@@ -627,13 +629,13 @@ bool CClientManager::InitializeItemTable()
} else {
test_data.Next(); //설명 로우 넘어가기.
- //2. 테스트 아이템 테이블 생성.
+ // 2. Create the test item table.
TItemTable * test_item_table = NULL;
int test_itemTableSize = test_data.m_File.GetRowCount()-1;
test_item_table = new TItemTable[test_itemTableSize];
memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize);
- //3. 테스트 아이템 테이블에 값을 넣고, 맵에까지 넣기.
+ // 3. Insert values into the test item table and populate the map.
while(test_data.Next()) {
@@ -651,25 +653,25 @@ bool CClientManager::InitializeItemTable()
//========================================================================//
- // 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로
- // (!)[item_table], 을 만든다.
- // <참고>
- // 각 row 들 중,
- // (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는
- // (b)[test_map_itemTableByVnum]의 것을 사용한다.
+ // 3) Using the 'item_proto.txt' file and the (a) [localMap] map,
+ // create the (!) [item_table] and .
+ //
+ // Among the rows,
+ // for those present in both (b) [test_map_itemTableByVnum] and (!) [mob_table],
+ // use the row from (b) [test_map_itemTableByVnum].
//========================================================================//
- //vnum들을 저장할 셋. 새로운 테스트 아이템을 판별할때 사용된다.
+ // A set to store vnums. Used to identify new test items.
set vnumSet;
- //파일 읽어오기.
+ // Read the file.
cCsvTable data;
if(!data.Load("item_proto.txt",'\t'))
{
SPDLOG_ERROR("item_proto.txt Failed to read the file");
return false;
}
- data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분)
+ data.Next(); // Exclude the top line (the part describing the item columns).
if (!m_vec_itemTable.empty())
{
@@ -678,8 +680,8 @@ bool CClientManager::InitializeItemTable()
m_map_itemTableByVnum.clear();
}
- //===== 아이템 테이블 생성 =====//
- //새로 추가되는 갯수를 파악한다.
+ //===== Create item table =====//
+ // Determine the number of newly added items.
int addNumber = 0;
while(data.Next()) {
int vnum = atoi(data.AsStringByIndex(0));
@@ -689,14 +691,14 @@ bool CClientManager::InitializeItemTable()
addNumber++;
}
}
- //data를 다시 첫줄로 옮긴다.(다시 읽어온다;;)
+ // Move the data back to the first line (re-read it;;)
data.Destroy();
if(!data.Load("item_proto.txt",'\t'))
{
SPDLOG_ERROR("item_proto.txt Failed to read the file");
return false;
}
- data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분)
+ data.Next(); // Skip the top line (the part that describes the item columns).
m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber);
memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
@@ -711,7 +713,7 @@ bool CClientManager::InitializeItemTable()
std::map::iterator it_map_itemTable;
it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col)));
if(it_map_itemTable == test_map_itemTableByVnum.end()) {
- //각 칼럼 데이터 저장
+ // Store data for each column
if (!Set_Proto_Item_Table(item_table, data, localMap))
{
@@ -720,7 +722,7 @@ bool CClientManager::InitializeItemTable()
- } else { //$$$$$$$$$$$$$$$$$$$$$$$ 테스트 아이템 정보가 있다!
+ } else { // $$$$$$$$$$$$$$$$$$$$$ There is test item information!
TItemTable *tempTable = it_map_itemTable->second;
item_table->dwVnum = tempTable->dwVnum;
@@ -777,7 +779,7 @@ bool CClientManager::InitializeItemTable()
//_______________________________________________________________________//
//========================================================================//
- // 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다.
+ // 4) Add rows from (b) [test_map_itemTableByVnum] that do not exist in (!) [item_table].
//========================================================================//
test_data.Destroy();
if(!test_data.Load("item_proto_test.txt",'\t'))
@@ -785,11 +787,11 @@ bool CClientManager::InitializeItemTable()
SPDLOG_ERROR("item_proto_test.txt Failed to read the file");
//return false;
} else {
- test_data.Next(); //설명 로우 넘어가기.
+ test_data.Next(); // Skip the description row.
- while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다.
+ while (test_data.Next()) // Iterate through each test data entry and add new ones.
{
- //중복되는 부분이면 넘어간다.
+ // Skip if it’s a duplicate.
set::iterator itVnum;
itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
if (itVnum != vnumSet.end()) {