Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.79 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////
  2. Gamelib/Property.h
  3. //////////////////////////////////////////////////////////////////////////
  4.  
  5. search:
  6. DWORD GetCRC();
  7. add below:
  8. bool ReadFromXML(const char* c_pszCRC);
  9. //////////////////////////////////////////////////////////////////////////
  10. Gamelib/Property.cpp
  11. //////////////////////////////////////////////////////////////////////////
  12.  
  13. search:
  14. bool CProperty::Save(const char * c_pszFileName)
  15. {
  16. add below:
  17. return false;
  18. it should look like:
  19. bool CProperty::Save(const char * c_pszFileName)
  20. {
  21. return false;
  22. CTempFile file;
  23. ...
  24. ...
  25. }
  26.  
  27. //////////////////////////////////////////////////////////////////////////
  28.  
  29. search:
  30. void CProperty::Clear()
  31.  
  32. add above:
  33. bool CProperty::ReadFromXML(const char* c_pszCRC)
  34. {
  35. m_dwCRC = atoi(c_pszCRC);
  36.  
  37. return true;
  38. }
  39. //////////////////////////////////////////////////////////////////////////
  40. Gamelib/PropertyManager.cpp
  41. //////////////////////////////////////////////////////////////////////////
  42.  
  43. search:
  44. #include "Property.h"
  45.  
  46. add below:
  47. #include <boost/property_tree/ptree.hpp>
  48. #include <boost/property_tree/xml_parser.hpp>
  49. #include <boost/foreach.hpp>
  50.  
  51. //////////////////////////////////////////////////////////////////////////
  52.  
  53. search:
  54. bool CPropertyManager::Initialize(const char * c_pszPackFileName)
  55. {
  56. if (c_pszPackFileName)
  57. {
  58. if (!m_pack.Create(m_fileDict, c_pszPackFileName, "", true))
  59. {
  60. LogBoxf("Cannot open property pack file (filename %s)", c_pszPackFileName);
  61. return false;
  62. }
  63.  
  64. m_isFileMode = false;
  65.  
  66. TDataPositionMap & indexMap = m_pack.GetIndexMap();
  67.  
  68. TDataPositionMap::iterator itor = indexMap.begin();
  69.  
  70. typedef std::map<DWORD, TEterPackIndex *> TDataPositionMap;
  71.  
  72. int i = 0;
  73.  
  74. while (indexMap.end() != itor)
  75. {
  76. TEterPackIndex * pIndex = itor->second;
  77. ++itor;
  78.  
  79. if (!stricmp("property/reserve", pIndex->filename))
  80. {
  81. LoadReservedCRC(pIndex->filename);
  82. continue;
  83. }
  84.  
  85. if (!Register(pIndex->filename))
  86. continue;
  87.  
  88. ++i;
  89. }
  90. }
  91. else
  92. {
  93. m_isFileMode = true;
  94. // NOTE : 여기서 Property를 등록시키면 WorldEditor에서 이상이 생김 ;
  95. // 또한, Property Tree List에도 등록을 시켜야 되기 때문에 바깥쪽에서.. - [levites]
  96. }
  97.  
  98. return true;
  99. }
  100.  
  101. bool CPropertyManager::BuildPack()
  102. {
  103. if (!m_pack.Create(m_fileDict, "property", ""))
  104. return false;
  105.  
  106. WIN32_FIND_DATA fdata;
  107. HANDLE hFind = FindFirstFile("property\\*", &fdata);
  108.  
  109. if (hFind == INVALID_HANDLE_VALUE)
  110. return false;
  111.  
  112. do
  113. {
  114. if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  115. continue;
  116.  
  117. char szSourceFileName[256 + 1];
  118. _snprintf(szSourceFileName, sizeof(szSourceFileName), "property\\%s", fdata.cFileName);
  119.  
  120. m_pack.Put(fdata.cFileName, szSourceFileName,COMPRESSED_TYPE_NONE,"");
  121. }
  122. while (FindNextFile(hFind, &fdata));
  123.  
  124. FindClose(hFind);
  125. return true;
  126. }
  127.  
  128. replace with:
  129. bool CPropertyManager::Initialize(const char * c_pszPackFileName)
  130. {
  131. if (c_pszPackFileName)
  132. {
  133. if (CEterPackManager::Instance().isExist("property/reserve"))
  134. {
  135. LoadReservedCRC("property/reserve");
  136. }
  137.  
  138. CMappedFile kListFile;
  139. PBYTE pbListData;
  140. if (CEterPackManager::Instance().Get(kListFile, "property/list", (LPCVOID*)&pbListData))
  141. {
  142. std::stringstream kSS;
  143. kSS << (char*)pbListData;
  144.  
  145. std::string strLine;
  146. while (std::getline(kSS, strLine))
  147. {
  148. std::size_t posRight = strLine.find_last_not_of(" \t\r\n");
  149. strLine = (posRight == std::string::npos ? "" : strLine.substr(0, posRight + 1));
  150. std::size_t posLeft = strLine.find_first_not_of(" \t\r\n");
  151. strLine = (posLeft == std::string::npos ? "" : strLine.substr(posLeft, std::string::npos));
  152.  
  153. if (!Register(strLine.c_str(), NULL))
  154. {
  155. TraceError("CPropertyManager::Initialize: Cannot register property '%s'!", strLine.c_str());
  156. }
  157. }
  158. }
  159.  
  160. CMappedFile kPropertyXML;
  161. PBYTE pbPropertyXML;
  162. if (CEterPackManager::Instance().Get(kPropertyXML, "property.xml", (LPCVOID*)&pbPropertyXML))
  163. {
  164. char* pszXML = new char[kPropertyXML.Size() + 1];
  165. memcpy(pszXML, pbPropertyXML, kPropertyXML.Size());
  166. pszXML[kPropertyXML.Size()] = 0;
  167. std::stringstream kXML;
  168. kXML << pszXML;
  169. delete[] pszXML;
  170.  
  171. try
  172. {
  173. boost::property_tree::ptree kPT;
  174. read_xml(kXML, kPT);
  175.  
  176. BOOST_FOREACH(boost::property_tree::ptree::value_type& v, kPT.get_child("PropertyList"))
  177. {
  178. if (v.first == "Property")
  179. {
  180. CProperty* pProperty = new CProperty(v.second.get<std::string>("<xmlattr>.filename").c_str());
  181. if (!pProperty->ReadFromXML(v.second.get<std::string>("<xmlattr>.crc").c_str()))
  182. {
  183. TraceError("CPropertyManager::Initialize: Cannot register '%s'!", v.second.get<std::string>("<xmlattr>.filename").c_str());
  184. delete pProperty;
  185. continue;
  186. }
  187.  
  188. DWORD dwCRC = pProperty->GetCRC();
  189.  
  190. TPropertyCRCMap::iterator itor = m_PropertyByCRCMap.find(dwCRC);
  191.  
  192. if (m_PropertyByCRCMap.end() != itor)
  193. {
  194. Tracef("Property already registered, replace %s to %s\n",
  195. itor->second->GetFileName(), v.second.get<std::string>("<xmlattr>.filename").c_str());
  196.  
  197. delete itor->second;
  198. itor->second = pProperty;
  199. }
  200. else
  201. m_PropertyByCRCMap.insert(TPropertyCRCMap::value_type(dwCRC, pProperty));
  202.  
  203. BOOST_FOREACH(boost::property_tree::ptree::value_type& s, v.second)
  204. {
  205. if (s.first == "<xmlattr>")
  206. {
  207. BOOST_FOREACH(boost::property_tree::ptree::value_type& d, s.second)
  208. {
  209. CTokenVector kVec;
  210. kVec.push_back(d.second.data());
  211. pProperty->PutVector(d.first.c_str(), kVec);
  212. }
  213. }
  214. }
  215. }
  216. }
  217. }
  218. catch (std::exception& e)
  219. {
  220. TraceError("CPropertyManager::Initialize: %s", e.what());
  221. return false;
  222. }
  223. }
  224. }
  225. else
  226. {
  227. m_isFileMode = true;
  228. }
  229.  
  230. return true;
  231. }
  232.  
  233. bool CPropertyManager::BuildPack()
  234. {
  235. return false;
  236. }
  237.  
  238. //////////////////////////////////////////////////////////////////////////
  239.  
  240. search:
  241. bool CPropertyManager::Get(DWORD dwCRC, CProperty ** ppProperty)
  242. {
  243. TPropertyCRCMap::iterator itor = m_PropertyByCRCMap.find(dwCRC);
  244.  
  245. if (m_PropertyByCRCMap.end() == itor)
  246. return false;
  247.  
  248. *ppProperty = itor->second;
  249. return true;
  250. }
  251.  
  252. add below:
  253. bool CPropertyManager::Put(const char * c_pszFileName, const char * c_pszSourceFileName)
  254. {
  255. if (!CopyFile(c_pszSourceFileName, c_pszFileName, FALSE))
  256. return false;
  257.  
  258. if (!m_isFileMode) // 팩 파일에도 넣음
  259. {
  260. if (!m_pack.Put(c_pszFileName, NULL, COMPRESSED_TYPE_NONE,""))
  261. {
  262. assert(!"CPropertyManager::Put cannot write to pack file");
  263. return false;
  264. }
  265. }
  266.  
  267. Register(c_pszFileName);
  268. return true;
  269. }
  270.  
  271. bool CPropertyManager::Erase(DWORD dwCRC)
  272. {
  273. TPropertyCRCMap::iterator itor = m_PropertyByCRCMap.find(dwCRC);
  274.  
  275. if (m_PropertyByCRCMap.end() == itor)
  276. return false;
  277.  
  278. CProperty * pProperty = itor->second;
  279. m_PropertyByCRCMap.erase(itor);
  280.  
  281. DeleteFile(pProperty->GetFileName());
  282. ReserveCRC(pProperty->GetCRC());
  283.  
  284. if (!m_isFileMode) // 파일 모드가 아니면 팩에서도 지움
  285. m_pack.Delete(pProperty->GetFileName());
  286.  
  287. FILE * fp = fopen("property/reserve", "a+");
  288.  
  289. if (!fp)
  290. LogBox("예약 CRC 파일을 열 수 없습니다.");
  291. else
  292. {
  293. char szCRC[64 + 1];
  294. _snprintf(szCRC, sizeof(szCRC), "%u\r\n", pProperty->GetCRC());
  295.  
  296. fputs(szCRC, fp);
  297. fclose(fp);
  298. }
  299.  
  300. delete pProperty;
  301. return true;
  302. }
  303.  
  304. bool CPropertyManager::Erase(const char * c_pszFileName)
  305. {
  306. CProperty * pProperty = NULL;
  307.  
  308. if (Get(c_pszFileName, &pProperty))
  309. return Erase(pProperty->GetCRC());
  310.  
  311. return false;
  312.  
  313. //////////////////////////////////////////////////////////////////////////
  314. EterPack/EterPackManager.h
  315. //////////////////////////////////////////////////////////////////////////
  316.  
  317. search:
  318. #include "EterPack.h"
  319. add below:
  320. #include "FoxFS.h"
  321.  
  322. //////////////////////////////////////////////////////////////////////////
  323.  
  324. search:
  325. enum ESearchModes
  326. {
  327. SEARCH_FILE_FIRST,
  328. SEARCH_PACK_FIRST
  329. };
  330. replace with:
  331. enum ESearchModes
  332. {
  333. SEARCH_FILE,
  334. SEARCH_PACK
  335. };
  336.  
  337. enum ESearchModes2
  338. {
  339. SEARCH_FILE_FIRST,
  340. SEARCH_PACK_FIRST
  341. };
  342.  
  343. //////////////////////////////////////////////////////////////////////////
  344.  
  345. search:
  346. CRITICAL_SECTION m_csFinder;
  347. add below:
  348. PFoxFS m_pFoxFS;
  349.  
  350. //////////////////////////////////////////////////////////////////////////
  351. EterPack/EterPackManager.cpp
  352. //////////////////////////////////////////////////////////////////////////
  353.  
  354. search:
  355. #ifdef __THEMIDA__
  356. #include <ThemidaSDK.h>
  357. #endif
  358. add below:
  359. namespace FoxFS
  360. {
  361. enum
  362. {
  363. ERROR_OK = 0,
  364. ERROR_BASE_CODE = 0,
  365. ERROR_FILE_WAS_NOT_FOUND = ERROR_BASE_CODE + 1,
  366. ERROR_CORRUPTED_FILE = ERROR_BASE_CODE + 2,
  367. ERROR_MISSING_KEY = ERROR_BASE_CODE + 3,
  368. ERROR_MISSING_IV = ERROR_BASE_CODE + 4,
  369. ERROR_DECRYPTION_HAS_FAILED = ERROR_BASE_CODE + 5,
  370. ERROR_DECOMPRESSION_FAILED = ERROR_BASE_CODE + 6,
  371. ERROR_ARCHIVE_NOT_FOUND = ERROR_BASE_CODE + 7,
  372. ERROR_ARCHIVE_NOT_READABLE = ERROR_BASE_CODE + 8,
  373. ERROR_ARCHIVE_INVALID = ERROR_BASE_CODE + 9,
  374. ERROR_ARCHIVE_ACCESS_DENIED = ERROR_BASE_CODE + 10,
  375. ERROR_KEYSERVER_SOCKET = ERROR_BASE_CODE + 11,
  376. ERROR_KEYSERVER_CONNECTION = ERROR_BASE_CODE + 12,
  377. ERROR_KEYSERVER_RESPONSE = ERROR_BASE_CODE + 13,
  378. ERROR_KEYSERVER_TIMEOUT = ERROR_BASE_CODE + 14,
  379. ERROR_UNKNOWN = ERROR_BASE_CODE + 15
  380. };
  381. }
  382.  
  383. const char* white_file_list[] = { "mark\10_0.tga" "mark\250_0.tga" };
  384.  
  385. bool isWhiteFile(const char* c_szFileName)
  386. {
  387. for (int i = 0; i < ARRAYSIZE(white_file_list); i++)
  388. {
  389. if (stricmp(c_szFileName, white_file_list[i]) == 0)
  390. {
  391. return true;
  392. }
  393. }
  394. return false;
  395. }
  396.  
  397. const char* white_file_list_ext[] = { "xml", "tga", "png", "bmp", "mp3", "jpg" };
  398.  
  399. bool isWhiteFileExt(const char* c_szFileName)
  400. {
  401. for (int i = 0; i < ARRAYSIZE(white_file_list_ext); i++)
  402. {
  403. std::string ext = CFileNameHelper::GetExtension(std::string(c_szFileName));
  404. std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
  405. std::string whiteExt = std::string(white_file_list_ext[i]);
  406.  
  407. if (ext == whiteExt)
  408. return true;
  409. }
  410. return false;
  411. }
  412.  
  413. //////////////////////////////////////////////////////////////////////////
  414.  
  415. in:
  416. bool CEterPackManager::Get(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)
  417. replace:
  418. if (m_iSearchMode == SEARCH_FILE_FIRST)
  419. {
  420. if (GetFromFile(rMappedFile, c_szFileName, pData))
  421. {
  422. return true;
  423. }
  424.  
  425. return GetFromPack(rMappedFile, c_szFileName, pData);
  426. }
  427.  
  428. if (GetFromPack(rMappedFile, c_szFileName, pData))
  429. {
  430. return true;
  431. }
  432.  
  433. return GetFromFile(rMappedFile, c_szFileName, pData);
  434. with:
  435. if (m_iSearchMode == SEARCH_FILE)
  436. {
  437. if (GetFromFile(rMappedFile, c_szFileName, pData))
  438. {
  439. return true;
  440. }
  441.  
  442. return GetFromPack(rMappedFile, c_szFileName, pData);
  443. }
  444. else
  445. {
  446. if (isExistInPack(c_szFileName))
  447. {
  448. return GetFromPack(rMappedFile, c_szFileName, pData);
  449. }
  450. else if (isExist(c_szFileName))
  451. {
  452. return GetFromFile(rMappedFile, c_szFileName, pData);
  453. }
  454. }
  455. return false;
  456.  
  457. //////////////////////////////////////////////////////////////////////////
  458.  
  459. replace all bool:
  460. bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)
  461. {
  462. ...
  463. ...
  464. }
  465. with:
  466. bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)
  467. {
  468. assert(c_szFileName);
  469.  
  470. FinderLock lock(m_csFinder);
  471.  
  472. if (m_pFoxFS)
  473. {
  474. int errorCodeSize = 0;
  475. if ((errorCodeSize = FoxFS_ExistsA(m_pFoxFS, c_szFileName)) == FoxFS::ERROR_OK)
  476. {
  477. unsigned int dwSize = FoxFS_SizeA(m_pFoxFS, c_szFileName), dwReadSize = 0;
  478. BYTE* pbData = new BYTE[dwSize + 1];
  479. int errorCode = 0;
  480. if ((errorCode = FoxFS_GetA(m_pFoxFS, c_szFileName, pbData, dwSize, &dwReadSize)) == FoxFS::ERROR_OK)
  481. {
  482. pbData[dwReadSize] = 0;
  483. *pData = pbData;
  484. rMappedFile.Link(dwReadSize, pbData);
  485. return true;
  486. }
  487. else {
  488. TraceError("FoxFS - Could not get file %s Error Code %d", c_szFileName, errorCode);
  489. }
  490. delete[] pbData;
  491. }
  492. else {
  493. TraceError("FoxFS: File not existing %s Error Code %d", c_szFileName, errorCodeSize);
  494.  
  495. }
  496. }
  497. else
  498. {
  499. TraceError("FoxFS: Not initialized!");
  500. }
  501.  
  502. return false;
  503. }
  504.  
  505. //////////////////////////////////////////////////////////////////////////
  506.  
  507. replace all bool:
  508. bool CEterPackManager::isExistInPack(const char * c_szFileName)
  509. {
  510. ...
  511. ...
  512. }
  513. with:
  514. bool CEterPackManager::isExistInPack(const char * c_szFileName)
  515. {
  516. assert(c_szFileName);
  517.  
  518. if (m_pFoxFS)
  519. {
  520. int errorCodeSize = 0;
  521. if ((errorCodeSize = FoxFS_ExistsA(m_pFoxFS, c_szFileName)) == FoxFS::ERROR_OK)
  522. {
  523. return true;
  524. }
  525. else
  526. {
  527. Tracenf("FoxFS : File not exists %s with error code %d", c_szFileName, errorCodeSize);
  528. }
  529. }
  530. else
  531. {
  532. TraceError("FoxFS: Not initialized!");
  533. }
  534.  
  535. return false;
  536. }
  537.  
  538. //////////////////////////////////////////////////////////////////////////
  539.  
  540. replace all bool:
  541. bool CEterPackManager::isExist(const char * c_szFileName)
  542. {
  543. ...
  544. ...
  545. }
  546. with:
  547. bool CEterPackManager::isExist(const char * c_szFileName)
  548. {
  549. if (m_iSearchMode == SEARCH_PACK)
  550. {
  551. if (isWhiteFile(c_szFileName) || isWhiteFileExt(c_szFileName))
  552. {
  553. return isExistInPack(c_szFileName) || (_access(c_szFileName, 0) == 0);
  554. }
  555. return isExistInPack(c_szFileName);
  556. }
  557.  
  558. if (_access(c_szFileName, 0) == 0)
  559. return true;
  560.  
  561. return isExistInPack(c_szFileName);
  562. }
  563.  
  564. //////////////////////////////////////////////////////////////////////////
  565.  
  566. replace all function:
  567. void CEterPackManager::RegisterRootPack(const char * c_szName)
  568. {
  569. ...
  570. ...
  571. }
  572. with:
  573. void CEterPackManager::RegisterRootPack(const char * c_szName)
  574. {
  575. assert(c_szName);
  576. if (m_pFoxFS)
  577. {
  578. int errorCode = 0;
  579. if ((errorCode = FoxFS_LoadA(m_pFoxFS, c_szName)) != FoxFS::ERROR_OK)
  580. {
  581. TraceError("%s: Error Code %d", c_szName, errorCode);
  582. }
  583. }
  584. else
  585. {
  586. TraceError("FoxFS: Not initialized!");
  587. }
  588. }
  589.  
  590. //////////////////////////////////////////////////////////////////////////
  591.  
  592. replace all bool:
  593. bool CEterPackManager::RegisterPack(const char * c_szName, const char * c_szDirectory, const BYTE* c_pbIV)
  594. {
  595. ...
  596. ...
  597. }
  598. with:
  599. bool CEterPackManager::RegisterPack(const char * c_szName, const char * c_szDirectory, const BYTE* c_pbIV)
  600. {
  601. assert(c_szName);
  602. if (m_pFoxFS)
  603. {
  604. int errorCode = 0;
  605. if ((errorCode = FoxFS_LoadA(m_pFoxFS, c_szName)) != FoxFS::ERROR_OK)
  606. {
  607. TraceError("%s: Error Code %d", c_szName, errorCode);
  608. }
  609. }
  610. else
  611. {
  612. TraceError("FoxFS: Not initialized!");
  613. }
  614.  
  615. return false;
  616. }
  617.  
  618. //////////////////////////////////////////////////////////////////////////
  619.  
  620. replace:
  621. CEterPackManager::CEterPackManager() : m_bTryRelativePath(false), m_iSearchMode(SEARCH_FILE_FIRST), m_isCacheMode(false)
  622. {
  623. InitializeCriticalSection(&m_csFinder);
  624. }
  625. with:
  626. CEterPackManager::CEterPackManager() : m_bTryRelativePath(false), m_iSearchMode(SEARCH_FILE_FIRST), m_isCacheMode(false)
  627. {
  628. InitializeCriticalSection(&m_csFinder);
  629. m_pFoxFS = FoxFS_Create();
  630. }
  631.  
  632. //////////////////////////////////////////////////////////////////////////
  633.  
  634. search:
  635. DeleteCriticalSection(&m_csFinder);
  636. add below:
  637. if (m_pFoxFS)
  638. {
  639. FoxFS_Destroy(m_pFoxFS);
  640. }
  641.  
  642. //////////////////////////////////////////////////////////////////////////
  643. UserInterface/UserInterface.cpp
  644. //////////////////////////////////////////////////////////////////////////
  645.  
  646. search:
  647. #pragma comment( lib, "dmoguids.lib" )
  648. add below:
  649. #pragma comment( lib, "lz4.lib" )
  650. #pragma comment( lib, "xxhash.lib" )
  651. #pragma comment( lib, "FoxFS.lib" )
  652.  
  653. replace all bool:
  654. bool PackInitialize(const char * c_pszFolder)
  655. {
  656. ...
  657. ...
  658. }
  659. with:
  660. bool PackInitialize(const char * c_pszFolder)
  661. {
  662. NANOBEGIN
  663. if (_access(c_pszFolder, 0) != 0)
  664. return true;
  665.  
  666. std::string stFolder(c_pszFolder);
  667. stFolder += "/";
  668.  
  669. CTextFileLoader::SetCacheMode();
  670. CEterPackManager::Instance().SetCacheMode();
  671. CEterPackManager::Instance().SetSearchMode(CEterPackManager::SEARCH_PACK);
  672.  
  673. CSoundData::SetPackMode();
  674.  
  675. CEterPackManager::Instance().RegisterPack("pack/bgm", "bgm/");
  676. CEterPackManager::Instance().RegisterPack("pack/effect", "d:/ymir work/effect/");
  677. CEterPackManager::Instance().RegisterPack("pack/etc", "*");
  678. CEterPackManager::Instance().RegisterPack("pack/guild", "d:/ymir work/guild/");
  679. CEterPackManager::Instance().RegisterPack("pack/icon", "icon/");
  680. CEterPackManager::Instance().RegisterPack("pack/item", "d:/ymir work/item/");
  681. CEterPackManager::Instance().RegisterPack("pack/locale", "locale/");
  682. CEterPackManager::Instance().RegisterPack("pack/monster", "d:/ymir work/monster/");
  683. CEterPackManager::Instance().RegisterPack("pack/monster2", "d:/ymir work/monster2/");
  684. CEterPackManager::Instance().RegisterPack("pack/season1", "season1/");
  685. CEterPackManager::Instance().RegisterPack("pack/season2", "season2/");
  686. CEterPackManager::Instance().RegisterPack("pack/npc", "d:/ymir work/npc/");
  687. CEterPackManager::Instance().RegisterPack("pack/npc2", "d:/ymir work/npc2/");
  688. CEterPackManager::Instance().RegisterPack("pack/pc", "d:/ymir work/pc/");
  689. CEterPackManager::Instance().RegisterPack("pack/pc2", "d:/ymir work/pc2/");
  690. CEterPackManager::Instance().RegisterPack("pack/property", "property");
  691. CEterPackManager::Instance().RegisterPack("pack/sound", "sound/");
  692. CEterPackManager::Instance().RegisterPack("pack/terrain", "d:/ymir work/terrainmaps/");
  693. CEterPackManager::Instance().RegisterPack("pack/textureset", "textureset/");
  694. CEterPackManager::Instance().RegisterPack("pack/tree", "d:/ymir work/tree/");
  695. CEterPackManager::Instance().RegisterPack("pack/zone", "d:/ymir work/zone/");
  696. CEterPackManager::Instance().RegisterPack("pack/map", "map/");
  697.  
  698. CEterPackManager::Instance().RegisterRootPack((stFolder + std::string("root")).c_str());
  699. NANOEND
  700. return true;
  701. }
  702. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement