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

📄 3droledata.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		{
			// get length ...
			DWORD dwLength;
			fread(&dwLength, sizeof(DWORD), 1, fp);
			
			// get str ...
			char szStr[_MAX_STRING];
			fread(szStr, sizeof(char), dwLength, fp);
			string str = szStr;
			pInfo->m_setStr.push_back(str);
		}
		m_setTipsInfo.push_back(pInfo);
	}
	return true;
}
//--------------------------------------------------------------------------------------
void	C3DRoleData::DestroyTipsInfo()
{
	int nAmount = m_setTipsInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TipsInfo* pInfo = m_setTipsInfo[i];
		if(pInfo)
		{
			pInfo->m_setStr.clear();
			SAFE_DELETE(pInfo);
		}
	}
	m_setTipsInfo.clear();
}
//--------------------------------------------------------------------------------------

BOOL	C3DRoleData::CreateUserHelpInfo()
{
	const char szDataFile[] = "ini/UserHelpInfo.dat";
	// open file ...
	FILE* fp = fopen(szDataFile, "rb");
	MYASSERT(fp);
	
	// header ...
	char szHeader[32];
	fread(szHeader, sizeof(char), 32, fp);
	
	// version
	DWORD dwVersion;
	fread(&dwVersion, sizeof(DWORD), 1, fp);

	// amount 
	DWORD dwRecordAmount;
	fread(&dwRecordAmount, sizeof(DWORD), 1, fp);
	for(DWORD dwCounter = 0; dwCounter < dwRecordAmount; dwCounter++)
	{
		UserHelpInfo* pInfo = new UserHelpInfo;
		MYASSERT(pInfo);
		fread(&pInfo->nMaxLevel, sizeof(int), 1, fp);
		fread(&pInfo->nMinLevel, sizeof(int), 1, fp);
		fread(&pInfo->nProfession, sizeof(int), 1, fp);
		fread(&pInfo->nSex,sizeof(int),1,fp);
		fread(&pInfo->nMapId,sizeof(int),1,fp);
		fread(&pInfo->nStatus,sizeof(int),1,fp);
		fread(&pInfo->nStatusLevel,sizeof(int),1,fp);
		fread(&pInfo->nItemType,sizeof(int),1,fp);
		fread(&pInfo->nMagicId,sizeof(int),1,fp);
		fread(&pInfo->nMagicLevel,sizeof(int),1,fp);

		//set default to 0
		if(pInfo->nMaxLevel <0) pInfo->nMaxLevel = 0;
		if(pInfo->nMinLevel <0) pInfo->nMinLevel = 0;
		if(pInfo->nProfession <0) pInfo->nProfession = 0;
		if(pInfo->nSex <0) pInfo->nSex = 0;
		if(pInfo->nMapId <0) pInfo->nMapId = 0;
		if(pInfo->nStatus <0) pInfo->nStatus = 0;
		if(pInfo->nStatusLevel <0) pInfo->nStatusLevel = 0;
		if(pInfo->nItemType <0) pInfo->nItemType = 0;
		if(pInfo->nMagicId <0) pInfo->nMagicId = 0;
		if(pInfo->nMagicLevel <0) pInfo->nMagicLevel = 0;

		// read str ...
		DWORD dwStrAmount;
		fread(&dwStrAmount, sizeof(DWORD), 1, fp);
		for(DWORD dwStrCounter = 0; dwStrCounter < dwStrAmount; dwStrCounter++)
		{
			// get length ...
			DWORD dwLength;
			fread(&dwLength, sizeof(DWORD), 1, fp);
			
			// get str ...
			char szStr[_MAX_STRING];
			fread(szStr, sizeof(char), dwLength, fp);
			string str = szStr;
			pInfo->m_setStr.push_back(str);
		}
		m_setUserHelpInfo.push_back(pInfo);
	}
	return true;
}
//--------------------------------------------------------------------------------------
/*
BOOL	C3DRoleData::CreateUserHelpInfo()
{
	const char szIniFile[] = "ini/UserHelpInfo.ini";
	char	szTitle[64];
	char	szSubTitle[64];
	char	szStr[512];
	int		nData;
	int		i;
	string	str;
	//Part1: header ...
	DWORD dwInfoAmount = 0;
	strcpy(szTitle, "Header");
	strcpy(szSubTitle, "HelpInfoAmount");
	::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
	dwInfoAmount = nData;

	//Part2: default info ...
	UserHelpInfo* pInfo = new UserHelpInfo;
	MYASSERT(pInfo);
	DWORD dwStrAmount = 0;
	strcpy(szTitle, "DefaultInfo");
	strcpy(szSubTitle, "HelpLineAmount");
	::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
	dwStrAmount = nData;
	for(i = 0; i < dwStrAmount; i ++)
	{
		sprintf(szSubTitle, "Line%d", i);
		::IniStrGet(szIniFile, szTitle, szSubTitle, szStr, true);
		str = szStr;
		pInfo->m_setStr.push_back(str);
	}
	m_setUserHelpInfo.push_back(pInfo);

	//Part3: text ...
	for(i = 0; i < dwInfoAmount; i ++)
	{
		UserHelpInfo* pInfo = new UserHelpInfo;
		MYASSERT(pInfo);

		sprintf(szTitle, "HelpInfo%d", i);

		strcpy(szSubTitle, "Profession");
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		pInfo->nProfession = nData;

		strcpy(szSubTitle, "MinLevel");
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		pInfo->nMinLevel = nData;

		strcpy(szSubTitle, "MaxLevel");
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		pInfo->nMaxLevel = nData;

		strcpy(szSubTitle, "Syndicate");
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		pInfo->nSyndicate = nData;

		strcpy(szSubTitle, "Marriage");
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		pInfo->nMarriage = nData;

		strcpy(szSubTitle, "HelpLineAmount");
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);

		dwStrAmount = nData;

		for(int j = 0; j < dwStrAmount; j ++)
		{
			sprintf(szSubTitle, "Line%d", j);
			::IniStrGet(szIniFile, szTitle, szSubTitle, szStr, true);
			str = szStr;
			pInfo->m_setStr.push_back(str);
		}
		m_setUserHelpInfo.push_back(pInfo);
	}	
	return true;
}*/

//--------------------------------------------------------------------------------------
void	C3DRoleData::DestroyUserHelpInfo()
{
	int nAmount = m_setUserHelpInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		UserHelpInfo* pInfo = m_setUserHelpInfo[i];
		if(pInfo)
		{
			pInfo->m_setStr.clear();
			SAFE_DELETE(pInfo);
		}
	}
	m_setUserHelpInfo.clear();
}
//--------------------------------------------------------------------------------------
TerrainNpcTypeInfo*			C3DRoleData::GetTerrainNpcInfo(OBJID idType)
{
	int nAmount = m_setTerrainNpcTypeInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainNpcTypeInfo* pInfo = m_setTerrainNpcTypeInfo[i];
		if(pInfo && pInfo->nType == idType)
		{
			return pInfo;
		}
	}
	if(nAmount > 0)
		return m_setTerrainNpcTypeInfo[0];
	return NULL;
}
//--------------------------------------------------------------------------------------
int							C3DRoleData::GetTipsAmount()
{
	return m_setTipsInfo.size();
}
//--------------------------------------------------------------------------------------
int							C3DRoleData::GetTipLineAmount(int nIndex)
{
	int nAmount = m_setTipsInfo.size();
	if((nIndex < 0) && (nIndex >= nAmount))
		return 0;
	if(m_setTipsInfo[nIndex])
		return m_setTipsInfo[nIndex]->m_setStr.size();
	else
		return 0;
}
//--------------------------------------------------------------------------------------
char*						C3DRoleData::GetTipLine(int nTipIndex, int nLineIndex)
{
	int nAmount = m_setTipsInfo.size();
	if((nTipIndex < 0) && (nTipIndex >= nAmount))
		return NULL;
	TipsInfo* pInfo = m_setTipsInfo[nTipIndex];
	if(!pInfo)
		return NULL;
	nAmount = pInfo->m_setStr.size();
	if((nLineIndex < 0) && (nLineIndex >= nAmount))
		return NULL;

	return (char*)pInfo->m_setStr[nLineIndex].c_str();
}
//--------------------------------------------------------------------------------------
BOOL	C3DRoleData::CreateTextAction()
{
	const char szIniFile[]="ini/TxtAction.ini";
	
	FILE* fp =fopen(szIniFile, "r");
	if (!fp)
		return false;
	char szAction[_MAX_STRING];
	char szText[_MAX_STRING];

	while (true)
	{
		int rval = fscanf(fp, "%s  %s\n", szAction, szText);
		if (rval == EOF)
			break;
		
		TextActionInfo* pInfo = new TextActionInfo;
		MYASSERT (pInfo);
		
		pInfo->strAction = szAction;
		pInfo->strText = szText;
		
		m_setTextAction.push_back(pInfo);
	}
	fclose(fp);
	return true;
}
//--------------------------------------------------------------------------------------
void	C3DRoleData::DestroyTextAction()
{
	int nAmount = m_setTextAction.size();
	for(int i = 0; i < nAmount; i ++)
	{
		SAFE_DELETE(m_setTextAction[i]);
	}
	m_setTextAction.clear();
}
//--------------------------------------------------------------------------------------
int	C3DRoleData::GetTextActionAmount()
{
	return m_setTextAction.size();	
}
//--------------------------------------------------------------------------------------
char* C3DRoleData::GetTextActionTitle(int nIndex)
{
	int nAmount = m_setTextAction.size();
	if((nIndex < 0) || (nIndex >= nAmount))
		return NULL;
	return (char*)m_setTextAction[nIndex]->strAction.c_str();
}
//--------------------------------------------------------------------------------------
char* C3DRoleData::GetTextActionText(int nIndex)
{
	int nAmount = m_setTextAction.size();
	if((nIndex < 0) || (nIndex >= nAmount))
		return NULL;
	return (char*)m_setTextAction[nIndex]->strText.c_str();
}
//--------------------------------------------------------------------------------------
BOOL	C3DRoleData::CreatePetInfo()
{
 	const char szPetData[_MAX_PATH]	=	"ini/pet.dat";
	FILE* fp = fopen(szPetData, "rb");
	if(!fp)
		return false;
	//read ...
	int nRecordAmount;
	fread(&nRecordAmount, sizeof(int), 1, fp);
	for(int i = 0; i < nRecordAmount; i ++)
	{
		PetInfo* pInfo = new PetInfo;
		MYASSERT(pInfo);
		m_setPetInfo.push_back(pInfo);
		// read Method Amount ...
		DWORD dwMethodAmount;
		fread(&dwMethodAmount, sizeof(DWORD), 1, fp);
		DWORD dwMyCheck = 0;
		for(int j = 0; j < dwMethodAmount; j++)
		{
			int nMethod;
			fread(&nMethod, sizeof(int), 1, fp);
			pInfo->setLocateTargetMethod.push_back(nMethod);
			dwMyCheck += nMethod;
		}
		dwMyCheck = dwMethodAmount*dwMyCheck;

		fread(&pInfo->nEnvMethod, sizeof(int), 1, fp);	
		fread(&pInfo->nAddSize, sizeof(int), 1, fp);	
		fread(&pInfo->nScale, sizeof(int), 1, fp);	
		fread(&pInfo->nAttackRange, sizeof(int), 1, fp);	
		fread(&pInfo->dwAttackInterval, sizeof(DWORD), 1, fp);	
		DWORD dwCheck;
		fread(&dwCheck, sizeof(DWORD), 1, fp);
		dwMyCheck += pInfo->nEnvMethod + pInfo->setLocateTargetMethod.size() * 2 
			+ pInfo->nAddSize + pInfo->nAttackRange * pInfo->dwAttackInterval;
		if(dwCheck != dwMyCheck)
			exit(-1);
	}
	fclose(fp);
	return true;
}
//--------------------------------------------------------------------------------------
void	C3DRoleData::DestroyPetInfo()
{
	int nAmount = m_setPetInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		PetInfo* pInfo = m_setPetInfo[i];
		if(pInfo)
			pInfo->setLocateTargetMethod.clear();
		SAFE_DELETE(pInfo);
	}
	m_setPetInfo.clear();
}
//--------------------------------------------------------------------------------------
PetInfo*	C3DRoleData::GetPetInfo(int nIndex)
{
	int nAmount = m_setPetInfo.size();
	if(nIndex < 0 || nIndex >= nAmount)
		return NULL;
	return m_setPetInfo[nIndex];
}
//--------------------------------------------------------------------------------------
LightInfo*	C3DRoleData::GetLightInfoByIndex(int nIndex)
{
	if(nIndex == 0)
		return NULL;
	nIndex --;
	int nAmount = m_setLightInfo.size();
	if(nIndex < 0 && nIndex >= nAmount)
		return NULL;
	return m_setLightInfo[nIndex];
}
//--------------------------------------------------------------------------------------
DWORD		C3DRoleData::GetRolePartLightInfo(OBJID idType)
{
	map<OBJID, DWORD>::iterator iter = m_setRolePartLightInfo.find(idType);
	if(iter != m_setRolePartLightInfo.end())
		return iter->second;
	return 0;
}
//--------------------------------------------------------------------------------------
BOOL	C3DRoleData::CreateLightLInfo()
{
	this->DestroyLightInfo();
	const char szFile[]="ini/Light.ini";
	FILE* fp = fopen(szFile, "r");
	if(!fp)
		return false;
	
	while(true)
	{
		// scan title
		char szLine[1024] = "";
		if(EOF == fscanf(fp, "%s\n", szLine))
		{
			fclose(fp);
			return true;
		}
		char szTitle[MAX_PATH] = "";
		if (1 != sscanf(szLine, "[%s", szTitle))
			continue;
		char* p =strchr(szTitle, ']');
		if (p)
			*p = '\0';
		else
		{
			fclose(fp);
			
			::ErrorOut("Error Title line %s in %s", szLine, szFile);
			return false;
		}
		LightInfo* pInfo = new LightInfo;
		MYASSERT(pInfo);
		pInfo->m_setLightPartInfo.clear();
		int nLightAmount = 0;
		MYASSERT(1 == fscanf(fp, "LightAmount=%d\n", &nLightAmount));
		for(int i = 0; i < nLightAmount; i ++)
		{
			LightInfoPart* pPart = new LightInfoPart;
			MYASSERT(pPart);
			int nIndex;
			int nData[4];
			MYASSERT(6 == fscanf(fp, "Light%d=%u %d %d %d %d\n", &nIndex, &pPart->dwTimeCost,
						&nData[0], &nData[1],
						&nData[2], &nData[3]));
			MYASSERT(nIndex == i);
			pPart->ucAlphaRate = nData[0];
			pPart->ucRedRate = nData[1];
			pPart->ucGreenRate = nData[2];
			pPart->ucBlueRate =  nData[3];
			pInfo->m_setLightPartInfo.push_back(pPart);
		}
		m_setLightInfo.push_back(pInfo);
	}
	fclose(fp);
	return true;
}
//--------------------------------------------------------------------------------------
void	C3DRoleData::DestroyLightInfo()
{
	int nAmount =  m_setLightInfo.size();
	for(int i  = nAmount-1; i >= 0; i --)
	{
		LightInfo* pInfo = m_setLightInfo[i];
		if(pInfo)
		{
			int nPartAmount = pInfo->m_setLightPartInfo.size();
			for(int j = 0; j < nPartAmount; j ++)
			{
				SAFE_DELETE(pInfo->m_setLightPartInfo[j]);
			}
			pInfo->m_setLightPartInfo.clear();
		}
		SAFE_DELETE(pInfo);
	}
	m_setLightInfo.clear();
}	
//--------------------------------------------------------------------------------------
BOOL	C3DRoleData::CreateRolePartLightInfo()
{
	m_setRolePartLightInfo.clear();
	const char szFile[]="ini/RolePartLight.ini";
	FILE* fp = fopen(szFile, "r");
	if(!fp)
		return false;
	OBJID idItemType;
	DWORD dwLight;
	while(true)
	{
		int rval = 	fscanf(fp, "%u=%u\n", &idItemType, &dwLight);
		if(rval == EOF)
			return false;
		if(rval == 2)
			m_setRolePartLightInfo[idItemType]=dwLight;
	}
	fclose(fp);
	return true;
}
//------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -