⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itemmanager.cpp

📁 国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国内还没有,所以找不到测试
💻 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 + -