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

📄 3droledata.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		SAFE_DELETE(m_setNpcType[i]);
	m_setNpcType.clear();
}
//---------------------------------------------------------------------
NpcTypeInfo* C3DRoleData::GetNpcTypeInfo(OBJID idType)
{
	int nAmount = m_setNpcType.size();
	for(int i = 0; i < nAmount; i ++)
	{
		NpcTypeInfo* pInfo = m_setNpcType[i];
		if(pInfo && pInfo->nType == idType)
			return pInfo;
	}
	return m_setNpcType[0];
}
//---------------------------------------------------------------------
BOOL	C3DRoleData::CreatePkTitleInfo()
{
	const char szIniFile[]="ini/Common.ini";
	char szTitle[]="PkTitle";
	char szSubtitle[64];
	// get amount
	int nAmount = 0;
	strcpy(szSubtitle, "Amount");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, nAmount));
	for(int i = 0; i < nAmount; i ++)
	{
		PkTitleInfo* pInfoPkTitle = new PkTitleInfo;
		MYASSERT(pInfoPkTitle);
		sprintf(szSubtitle, "PkValueMax%d", i);
		MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, pInfoPkTitle->nMaxPkValue));
		sprintf(szSubtitle, "PkValueMin%d", i);
		MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, pInfoPkTitle->nMinPkValue));
		sprintf(szSubtitle, "PkTitle%d", i);
		MYASSERT(::IniStrGet(szIniFile, szTitle, szSubtitle, pInfoPkTitle->szTitle));
		m_setPkTitle.push_back(pInfoPkTitle);
	}
	return true;
}
//---------------------------------------------------------------------
void	C3DRoleData::DestroyPkTitleInfo()
{
	int nAmount = m_setPkTitle.size();
	for(int i = 0; i < nAmount; i ++)
		SAFE_DELETE(m_setPkTitle[i]);
	m_setPkTitle.clear();
}
//---------------------------------------------------------------------
char* C3DRoleData::GetPkTitle(int nPkValue)
{
	for(int i = 0; i < m_setPkTitle.size(); i ++)
	{
		PkTitleInfo* pInfo = m_setPkTitle[i];
		if(pInfo && nPkValue <= pInfo->nMaxPkValue && nPkValue >= pInfo->nMinPkValue)
		{
			return pInfo->szTitle;
		}
	}
	return NULL;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyEffectInfo()
{
	int nAmount = m_setEffectInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		SAFE_DELETE(m_setEffectInfo[i]);
	}
	m_setEffectInfo.clear();
}
//---------------------------------------------------------------------
EffectInfo* C3DRoleData::GetEffectInfo(char* pszIndex)
{
	if(!pszIndex)
		return NULL;
	int nAmount = m_setEffectInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		EffectInfo* pInfo = m_setEffectInfo[i];
		if(pInfo && strcmp(pInfo->szTitle, pszIndex) == 0)
		{
			return pInfo;
		}

	}
	return NULL;
}
//---------------------------------------------------------------------
void C3DRoleData::CreateEffectInfo()
{
	CONST CHAR INI_FILE[] = "ini/Effect.ini";		
	FILE* fp = fopen(INI_FILE, "r");
	if (!fp)
	{
		::ErrorOut("error on open %s.", INI_FILE);
		return;
	}

	while(true)
	{
		// scan title
		char szLine[1024] = "";
		if (EOF == fscanf(fp, "%s\n", szLine))
			break;

		char szTitle[_MAX_STRING] = "";
		if (1 != sscanf(szLine, "[%s]", szTitle))
			continue;

		szTitle[strlen(szTitle)-1] = '\0';

		// get info ...
		EffectInfo* pInfo = new EffectInfo;
		MYASSERT (pInfo);
		memset(pInfo, 0L, sizeof(EffectInfo));
	
		strcpy(pInfo->szTitle, szTitle);
		BOOL bSuc = true;
		bSuc &= fscanf(fp, "AniTitle=%s\n", pInfo->szAniTitle);
		bSuc &= fscanf(fp, "LoopTime=%d\n", &pInfo->dwLoopTime);
		bSuc &= fscanf(fp, "FrameInterval=%d\n", &pInfo->dwFrameInterval);
		bSuc &= fscanf(fp, "ShowWay=%d\n", &pInfo->dwShowWay);
		bSuc &= fscanf(fp, "LoopInterval=%d\n", &pInfo->dwLoopInterval);
		bSuc &= fscanf(fp, "OffsetX=%d\n", &pInfo->nOffsetX);
		bSuc &= fscanf(fp, "OffsetY=%d\n", &pInfo->nOffsetY);
		bSuc &= fscanf(fp, "Exigence=%d\n", &pInfo->nExigence);
		bSuc &= fscanf(fp, "Delay=%d\n", &pInfo->dwDelay);

		if (!bSuc)
		{
			::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
			break;
		}

		m_setEffectInfo.push_back(pInfo);
	}

	fclose(fp);
}
//---------------------------------------------------------------------

BOOL C3DRoleData::CreateMapMagicItemInfo()
{
	CONST CHAR INI_FILE[] = "ini/MapMagicItem.ini";
	FILE* fp = fopen(INI_FILE, "r");
	if (!fp)
	{
		::ErrorOut("error on open %s.", INI_FILE);
		return false;
	}
	while(true)
	{		
		// scan title
		char szLine[1024] = "";
		if (EOF == fscanf(fp, "%s\n", szLine))
			break;

		char szTitle[_MAX_STRING] = "";
		int nType = 0;
		if (1 != sscanf(szLine, "[Type%d]", &nType))
			continue;

		// get info ...
		MapMagicItemInfo* pInfo = new MapMagicItemInfo;
		if (!pInfo)
			break;
		memset(pInfo, 0L, sizeof(MapMagicItemInfo));

		pInfo->idType = nType;
		BOOL bSucRead = true;
		bSucRead &= fscanf(fp, "Start=%s\n", pInfo->szStart);
		bSucRead &= fscanf(fp, "Last=%s\n", pInfo->szLast);
		bSucRead &= fscanf(fp, "End=%s\n", pInfo->szEnd);

		if (!bSucRead)
		{
			::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
			break;
		}

		m_setMapMagicItem.push_back(pInfo);
	}

	fclose(fp);
	return true;
	
}

//-------------------------------------------------------------------

void C3DRoleData::DestroyMapMagicItemInfo()
{
	int nAmount = m_setMapMagicItem.size();
	for(int i = 0; i < nAmount; i ++)
	{
		MapMagicItemInfo* pInfo = m_setMapMagicItem[i];
		SAFE_DELETE(pInfo);
	}
	m_setMapMagicItem.clear();
}

//-------------------------------------------------------------------

MapMagicItemInfo*	C3DRoleData::GetMapMagicItemInfo(int nType)
{
	int nAmount = m_setMapMagicItem.size();
	for(int i = 0; i < nAmount; i ++)
	{
		MapMagicItemInfo* pInfo = m_setMapMagicItem[i];
		if(pInfo && pInfo->idType == nType)
			return pInfo;
	}
	return NULL;
}

//-------------------------------------------------------------------
FlyingObjInfo*	C3DRoleData::GetFlyingObjInfo(OBJID idItem)
{
	int nAmount = m_setFlyObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		FlyingObjInfo* pInfo = m_setFlyObjInfo[i];
		if(pInfo && pInfo->idType == idItem)
		{
			return pInfo;
		}
	}
	// 容错...
	if(nAmount > 0)
		return m_setFlyObjInfo[0];
	return NULL;
}
//-------------------------------------------------------------------
BOOL	C3DRoleData::CreateFlyObjInfo()
{
	char szIniFile[] = "ini/3DFlyingObj.ini";
	char szTitle[64];
	char szSubTitle[64];
	//---------------------------------------------------------------
	// Get Header info ...
	int nData, nAmount;
	strcpy(szTitle, "Header");
	strcpy(szSubTitle, "Amount");
	::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
	nAmount = nData;
	//---------------------------------------------------------------
	for(int i = 0; i < nAmount; i ++)
	{
		// Get ID ...
		strcpy(szTitle, "Header");
		sprintf(szSubTitle, "ID%d", i);
		OBJID id;
		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		id = nData;	
		FlyingObjInfo* pInfo = new  FlyingObjInfo;
		MYASSERT(pInfo);
		pInfo->idType = id;
		
		// Get Info ...
		sprintf(szTitle, "%u", id);
		strcpy(szSubTitle, "SimpleObjID");

		::IniDataGet(szIniFile, szTitle, szSubTitle, nData, true);
		pInfo->idSimpleObj = nData;
		
		strcpy(szSubTitle, "EffectIndex");
		::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szFlyEffect, true);

		strcpy(szSubTitle, "FlyingSound");
		::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szFlySound, true);

		strcpy(szSubTitle, "HitSound");
		::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szHitSound, true);

		strcpy(szSubTitle, "TargetEffect");
		::IniStrGet(szIniFile, szTitle, szSubTitle, pInfo->szTargetEffect, true);

		m_setFlyObjInfo.push_back(pInfo);
	}

	return true;
}
//-------------------------------------------------------------------
void	C3DRoleData::DestroyFlyObjInfo()
{
	int nAmount = m_setFlyObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		SAFE_DELETE(m_setFlyObjInfo[i]);
	}
	m_setFlyObjInfo.clear();
}
//-------------------------------------------------------------------
BOOL	C3DRoleData::CreateTerrainWeatherInfo()
{
	TerrainWeatherInfo infoWeather;
	char szIni[]="ini/weather.ini";
	FILE* fp = fopen(szIni, "r");
	MYASSERT(fp);
	while(true)
	{
		int nReturn = fscanf(fp, "%d %d %d %d %u\n", &infoWeather.nTerrain, &infoWeather.nType, &infoWeather.nWindDir, &infoWeather.nLevel, &infoWeather.dwColor);
		if(EOF == nReturn)
			break;
		if(5 == nReturn)
		{
			TerrainWeatherInfo* pInfo = new TerrainWeatherInfo;
			if(pInfo)
			{
				memcpy(pInfo, &infoWeather, sizeof(TerrainWeatherInfo));
				m_setTerrainWeatherInfo.push_back(pInfo);
			}
		}
	}
	return true;
}
//-------------------------------------------------------------------
void	C3DRoleData::DestroyTerrainWeatherInfo()
{
	int nAmount = m_setTerrainWeatherInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		if(m_setTerrainWeatherInfo[i])
		{
			SAFE_DELETE(m_setTerrainWeatherInfo[i]);
		}
		m_setTerrainWeatherInfo.clear();
	}
}
//-------------------------------------------------------------------
TerrainWeatherInfo* C3DRoleData::GetWeatherInfo(int nTerrain)
{
	int nAmount = m_setTerrainWeatherInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		if(m_setTerrainWeatherInfo[i] && m_setTerrainWeatherInfo[i]->nTerrain == nTerrain)
		{
			return m_setTerrainWeatherInfo[i];
		}
	}
	return NULL;
}
//-------------------------------------------------------------------
StatusEffectInfo*	C3DRoleData::GetStatusEffectInfoByIndex(int nIndex)
{
	int nAmount = m_setStatusEffectInfo.size();
	if(nIndex>0 && nIndex<nAmount)
		return m_setStatusEffectInfo[nIndex];
	return NULL;
}
//-------------------------------------------------------------------
DWORD C3DRoleData::GetStatusEffectInfoAmount()
{
	return m_setStatusEffectInfo.size();
}
//-------------------------------------------------------------------
BOOL C3DRoleData::CreateStatusEffectInfo()
{
	char szIni[]="ini/statuseffect.ini";
	StatusEffectInfo info;
	FILE* fp = fopen(szIni, "r");
	MYASSERT(fp);
	while(true)
	{
		int nReturn = fscanf(fp, "%I64x %s %s\n", &info.dwStatus, info.sz3DEffect, info.sz2DEffect);
		if(EOF == nReturn)
			break;
		if(3 == nReturn)
		{
			StatusEffectInfo* pInfo = new StatusEffectInfo;
			if(pInfo)
			{
				memcpy(pInfo, &info, sizeof(StatusEffectInfo));
				m_setStatusEffectInfo.push_back(pInfo);
			}
		}
	}
	return true;
}
//-------------------------------------------------------------------
void C3DRoleData::DestroyStatusEffectInfo()
{
	int nAmount = m_setStatusEffectInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		if(m_setStatusEffectInfo[i])
			SAFE_DELETE(m_setStatusEffectInfo[i]);
	}
	m_setStatusEffectInfo.clear();
}
//-------------------------------------------------------------------
const char*	C3DRoleData::GetUserHelpInfoLineByIndex(int nProfessional, int nLevel, int nSex,int nMapId,int nStatus,int nStatusLevel,int nItemType,int nMagicId, int nIndex)
{
	int nAmount = m_setUserHelpInfo.size();
	for(int i = 1; i < nAmount; i ++)
	{
		UserHelpInfo* pInfo = m_setUserHelpInfo[i];
		if(pInfo 
			&& pInfo->nProfession == nProfessional 
			&& nLevel <= pInfo->nMaxLevel 
			&& nLevel >= pInfo->nMinLevel
			&& nStatus == pInfo->nStatus
			&& nStatusLevel == pInfo->nStatusLevel
			&& nSex == pInfo->nSex
			&& nMapId == pInfo->nMapId
			&& nItemType == pInfo->nItemType
			&& nMagicId == pInfo->nMagicId)
		{
			int nStrAmount = pInfo->m_setStr.size();
			if(nIndex >= nStrAmount || nIndex < 0)
				return NULL;
			return pInfo->m_setStr[nIndex].c_str();
		}
	}
	if(nAmount == 0)
		return NULL;
	// default ...
	UserHelpInfo* pInfo = m_setUserHelpInfo[0];
	if(!pInfo)
		return NULL;
	int nStrAmount = pInfo->m_setStr.size();
	if(nIndex >= nStrAmount || nIndex < 0)
		return NULL;
	return pInfo->m_setStr[nIndex].c_str();
}
//--------------------------------------------------------------------------------------
int		C3DRoleData::GetUserHelpInfoLineAmount(int nProfessional, int nLevel,  int nSex,int nMapId,int nStatus,int nStatusLevel,int nItemType,int nMagicId)
{
	int nAmount = m_setUserHelpInfo.size();
	for(int i = 1; i < nAmount; i ++)
	{
		UserHelpInfo* pInfo = m_setUserHelpInfo[i];
		if(pInfo && 
			pInfo->nProfession == nProfessional 
			&& nLevel <= pInfo->nMaxLevel 
			&& nLevel >= pInfo->nMinLevel
			&& nStatus == pInfo->nStatus
			&& nStatusLevel == pInfo->nStatusLevel
			&& nSex == pInfo->nSex
			&& nMapId == pInfo->nMapId
			&& nItemType == pInfo->nItemType
			&& pInfo->nMagicId == nMagicId  )
		{
			return pInfo->m_setStr.size();
		}
	}
	if(nAmount == 0)
		return 0;
	// default ...
	UserHelpInfo* pInfo = m_setUserHelpInfo[0];
	if(pInfo)
		return pInfo->m_setStr.size();
	return NULL;
}
//--------------------------------------------------------------------------------------
BOOL	C3DRoleData::CreateTipsInfo()
{
	const char szDataFile[] = "ini/tips.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++)
	{
		TipsInfo* pInfo = new TipsInfo;
		// read str ...
		DWORD dwStrAmount;
		fread(&dwStrAmount, sizeof(DWORD), 1, fp);
		for(DWORD dwStrCounter = 0; dwStrCounter < dwStrAmount; dwStrCounter++)

⌨️ 快捷键说明

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