📄 itemmanager.cpp
字号:
//-----------------------------------------------------------------------------------------------------------
// File : ItemManager.cpp
//-----------------------------------------------------------------------------------------------------------
#include "StdAfx.h"
CItemManager::CItemManager()
{
}
CItemManager::~CItemManager()
{
mapTree::iterator iter;
mapItem::iterator iterItem;
mapItem *pTree;
for(iter = m_mapTree.begin(); iter != m_mapTree.end(); ++iter)
{
pTree = (*iter).second;
for(iterItem = pTree->begin(); iterItem != pTree->end(); ++iterItem)
SAFE_DELETE((*iterItem).second);
pTree->clear();
SAFE_DELETE(pTree);
}
m_mapTree.clear();
}
ITEM_DATA* CItemManager::FindItem( int nIndex )
{
int nKind = nIndex / ITEM_SPACE;
mapTree::iterator iter = m_mapTree.find(nKind);
mapItem *pTree = (*iter).second;
mapItem::iterator iterItem = pTree->find(nIndex);
TREE_ITEM *pTreeItem = (*iterItem).second;
return pTreeItem->pItemInfo;
}
bool CItemManager::LoadItem(char *szFileName)
{
HANDLE hFile = CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE) return false;
DWORD dwSize;
char szCategory[LEN_ITEM_NAME+1]={0, };
char szKind[LEN_ITEM_NAME+1]={0, };
DWORD dwVersion, dwCount;
BYTE nCnt, nKind;
ReadFile(hFile, szCategory, LEN_ITEM_NAME, &dwSize, NULL);
ReadFile(hFile, &dwVersion, sizeof(DWORD), &dwSize, NULL);
ReadFile(hFile, &nCnt, sizeof(BYTE), &dwSize, NULL);
while(nCnt--)
{
ReadFile(hFile, &nKind, sizeof(BYTE), &dwSize, NULL);
ReadFile(hFile, &dwCount, sizeof(DWORD), &dwSize, NULL);
ReadFile(hFile, szKind, LEN_ITEM_NAME, &dwSize, NULL);
szKind[LEN_ITEM_NAME] = NULL;
if(!InsertTree(nKind, szKind))
return false;
if(!strcmp(szCategory, "WEAPON"))
{
while(dwCount--)
{
WEAPON_DATA *pWeapon = new WEAPON_DATA;
ReadFile(hFile, pWeapon, sizeof(WEAPON_DATA), &dwSize, NULL);
if(!InsertItem((ITEM_DATA *)pWeapon))
return false;
}
}
else if(!strcmp(szCategory, "ASSIST"))
{
while(dwCount--)
{
ASSIST_DATA *pAssist = new ASSIST_DATA;
ReadFile(hFile, pAssist, sizeof(ASSIST_DATA), &dwSize, NULL);
if(!InsertItem((ITEM_DATA *)pAssist))
return false;
}
}
else if(!strcmp(szCategory, "MECHANIC"))
{
while(dwCount--)
{
MECHANIC_DATA *pMechanic = new MECHANIC_DATA;
ReadFile(hFile, pMechanic, sizeof(MECHANIC_DATA), &dwSize, NULL);
if(!InsertItem((ITEM_DATA *)pMechanic))
return false;
}
}
}
CloseHandle(hFile);
return true;
}
BOOL CItemManager::InsertTree(int nKind, char *pTreeName)
{
TREE_ITEM *pTreeItem = new TREE_ITEM;
pTreeItem->nKey = nKind;
strcpy(pTreeItem->szName, pTreeName);
mapItem *pTree = new mapItem;
pTree->insert(mapItem::value_type(0, pTreeItem));
return (m_mapTree.insert(mapTree::value_type(pTreeItem->nKey, pTree)).second != NULL);
}
BOOL CItemManager::InsertItem(ITEM_DATA *pItemInfo)
{
TREE_ITEM *pTreeItem = new TREE_ITEM;
pTreeItem->nKey = pItemInfo->nSpecies;
pTreeItem->pItemInfo = pItemInfo;
strcpy(pTreeItem->szName, pItemInfo->szItemName);
mapTree::iterator iter = m_mapTree.find(pTreeItem->nKey);
mapItem *pTree = (*iter).second;
return (pTree->insert(mapItem::value_type(pTreeItem->pItemInfo->dwIndex, pTreeItem)).second != NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -