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

📄 3droledata.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			{
				char szIndex[256] = "";
				char strEffect[64] = "";
				int nX,nY,nZ;
				nX =0;
				nY =0;				
				nZ =0;

				sprintf(szIndex, "Effect%d=%s\n", i, "%s");
				bSuc &= fscanf(fp, szIndex, strEffect);	
				
				bSuc &= fscanf(fp, "X=%d\n", &nX);	
				if (!bSuc)
				{
					::ErrorOut("error X: Effect%d of %s %s", i, szIniFile, szTitle);
					return;
				}
				bSuc &= fscanf(fp, "Y=%d\n", &nY);	
				if (!bSuc)
				{
					::ErrorOut("error Y: Effect%d of %s %s", i, szIniFile, szTitle);
					return;
				}
				
				bSuc &= fscanf(fp, "Z=%d\n", &nZ);	
				if (!bSuc)
				{
					::ErrorOut("error Z: Effect%d of %s %s", i, szIniFile, szTitle);
					return;
				}
				else
				{
					EffectLookSet pLookSet;
					pLookSet.nX = nX;
					pLookSet.nY = nY;					
					pLookSet.nZ = nZ;
					strcpy(pLookSet.szEffect,strEffect);
					pInfo->setEffect.push_back(pLookSet);
				}
			}
			m_setEffectLookSetInfo[pInfo->dwLook] = pInfo;
		}
		fclose(fp);
	}
	else
		::ErrorOut("error on open %s.", szIniFile);	
}
//---------------------------------------------------------------------
BOOL C3DRoleData::GetEffectLookSetInfo(DWORD dwLook , char* szEffect , int& x,int& y,int& z)
{
	map<OBJID, EffectLookSetInfo*>::iterator iter = m_setEffectLookSetInfo.find(dwLook);
	if(iter != m_setEffectLookSetInfo.end())
	{
		EffectLookSetInfo* pInfo = iter->second;
		if (pInfo)
		{
			int nAmount = pInfo->nAmount;
			if (nAmount == 0) 
			{
				x = pInfo->nDefaultX;
				y = pInfo->nDefaultY;
				z = pInfo->nDefaultZ;
				return TRUE;
			}
			for(int i=0;i<nAmount;i++)
			{
				if(strcmp(szEffect,pInfo->setEffect[i].szEffect) == 0)
				{
					x = pInfo->setEffect[i].nX;
					y = pInfo->setEffect[i].nY;
					z = pInfo->setEffect[i].nZ;
					return TRUE;
				}
			}
		}
	}
	return FALSE;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyEffectLookSetInfo()
{
	map<OBJID, EffectLookSetInfo*>::iterator iter = m_setEffectLookSetInfo.begin();
	while(iter != m_setEffectLookSetInfo.end())
	{
		EffectLookSetInfo* pInfo = iter->second;
		pInfo->setEffect.clear();
		delete iter->second;
		iter ++;
	}
	m_setEffectLookSetInfo.clear();
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyRolePartInfo()
{
	this->DestroyRolePartInfo(m_setArmor);
	this->DestroyRolePartInfo(m_setArmet);
	this->DestroyRolePartInfo(m_setWeapon);
	this->DestroyRolePartInfo(m_setMantle);
	this->DestroyRolePartInfo(m_setMount);
	this->DestroyRolePartInfo(m_setHead);
}
//---------------------------------------------------------------------
void C3DRoleData::CreateRolePartInfo()
{
	this->DestroyRolePartInfo();
	this->CreateRolePartInfo(m_setHead, "ini/Head.ini");	
	this->CreateRolePartInfo(m_setArmor, "ini/armor.ini");
	this->CreateRolePartInfo(m_setArmet, "ini/armet.ini");
	this->CreateRolePartInfo(m_setWeapon, "ini/weapon.ini");
	this->CreateRolePartInfo(m_setMantle, "ini/Mantle.ini");
	this->CreateRolePartInfo(m_setMount, "ini/mount.ini");
}
//---------------------------------------------------------------------
void C3DRoleData::CreateRolePartInfo(MAP_ROLEPARTINFO& m_setInfo, const char* pszFilename)
{
	if(!pszFilename)
		return;
	this->DestroyRolePartInfo(m_setInfo);

	//---------------------------------------
	FILE* fp = fopen((char*)pszFilename, "r");
	if(!fp)
		return;

	char szLine[1024];
	char szTitle[_MAX_STRING];
	while(true)
	{
		// scan title
		if(EOF == fscanf(fp, "%s\n", szLine))
		{
			fclose(fp);
			return;
		}
		if(1 != sscanf(szLine, "[%s]", szTitle))
			continue;
		szTitle[strlen(szTitle)-1] = '\0';
		// get info ...
		OBJID idMesh=0, idTexture=0, idTexture2=0;
		float fMoveRateX = 0.0f, fMoveRateY = 0.0f;
		fscanf(fp, "Mesh=%u\n", &idMesh);
		fscanf(fp, "Texture=%u\n", &idTexture);
		if(1==fscanf(fp, "Texture2=%u\n", &idTexture2))
		{
			fscanf(fp, "MoveRateX=%f\n", &fMoveRateX);
			fscanf(fp, "MoveRateY=%f\n", &fMoveRateY);
		}


		static RolePartInfo infoRolePart;
		infoRolePart.idMesh = idMesh;
		infoRolePart.idTexture = idTexture;
		infoRolePart.fMoveRateX = fMoveRateX;
		infoRolePart.fMoveRateY = fMoveRateY;


		OBJID id = RolePartInfoStr2ID(szTitle);
		m_setInfo[id] = infoRolePart;
	}
	return;
}

//---------------------------------------------------------------------
void C3DRoleData::DestroyRolePartInfo(MAP_ROLEPARTINFO& m_setInfo)
{
	m_setInfo.clear();
}
//---------------------------------------------------------------------
RolePartInfo* C3DRoleData::GetRoleRartInfo(MAP_ROLEPARTINFO& m_setInfo, const char* pszTitle)
{
	if(!pszTitle)
		return NULL;
	OBJID id = RolePartInfoStr2ID(pszTitle);

	map<OBJID, RolePartInfo>::iterator iter = m_setInfo.find(id);
	if (iter != m_setInfo.end())
	{
		return &iter->second;
	}
	return NULL;
}

//---------------------------------------------------------------------
RolePartInfo* C3DRoleData::GetRoleRartInfo(int nRolePartIndex, const char* pszTitle)
{
	switch(nRolePartIndex)
	{
	case ROLEPARTINFO_WEAPON:
		return this->GetRoleRartInfo(m_setWeapon, pszTitle);
	case ROLEPARTINFO_ARMET:
		return this->GetRoleRartInfo(m_setArmet, pszTitle);
	case ROLEPARTINFO_AEMOR:
		return this->GetRoleRartInfo(m_setArmor, pszTitle);
	case ROLEPARTINFO_MANTLE:
		return this->GetRoleRartInfo(m_setMantle, pszTitle);
	case ROLEPARTINFO_MOUNT:
		return  this->GetRoleRartInfo(m_setMount, pszTitle);
	case ROLEPARTINFO_HEAD:
		return  this->GetRoleRartInfo(m_setHead, pszTitle);
	default:
		return NULL;
	}
}
//---------------------------------------------------------------------
void C3DRoleData::LoadCommonIni()
{
	const char szIniFile[]="ini/Common.ini";
	char szTitle[64];
	char szSubtitle[64];

	// face amount
	strcpy(szTitle, "Playerface");
	strcpy(szSubtitle, "MaleFaceAmount");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nMaleFaceAmount));
	strcpy(szSubtitle, "FemaleFaceAmount");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nFemaleFaceAmount));

	strcpy(szTitle, "EmblemAmount");
	strcpy(szSubtitle, "EmblemAmount");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nEmblemAmount));


	strcpy(szTitle, "Statuary");
	strcpy(szSubtitle, "LeaderScale");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nLeaderScale));
	strcpy(szSubtitle, "LeaderMaxLife");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nLeaderMaxLife));
	strcpy(szSubtitle, "AssistantScale");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nAssistantScale));
	strcpy(szSubtitle, "AssistantMaxLife");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nAssistantMaxLife));
	strcpy(szSubtitle, "SubLeaderScale");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nSubLeaderScale));
	strcpy(szSubtitle, "SubLeaderMaxLife");
	MYASSERT(::IniDataGet(szIniFile, szTitle, szSubtitle, m_nSubLeaderMaxLife));
}

//---------------------------------------------------------------------
void C3DRoleData::Create3DSimpleObjInfo()
{
	CONST CHAR INI_FILE[] = "ini/3DSimpleObj.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 ...
		C3DSimpleObjInfo* pInfo = new C3DSimpleObjInfo;
		MYASSERT(pInfo);
		memset(pInfo, 0L, sizeof(C3DSimpleObjInfo));

		pInfo->idType = atoi(szTitle+strlen("ObjIDType"));

		BOOL bSuc = true;
		bSuc &= fscanf(fp, "PartAmount=%d\n", &(pInfo->nParts));
		if (!bSuc || pInfo->nParts > _MAXPART_SIMPLEOBJ)
		{
			::ErrorOut("error part amount data: %s of %s, must <= %d", szTitle, INI_FILE, _MAXPART_SIMPLEOBJ);
			break;
		}

		for (int i=0; i<pInfo->nParts; i++)
		{
			char szIndex[256] = "";

			sprintf(szIndex, "Part%d=%s\n", i, "%d");
			bSuc &= fscanf(fp, szIndex, &(pInfo->idMesh[i]));

			sprintf(szIndex, "Texture%d=%s\n", i, "%d");
			bSuc &= fscanf(fp, szIndex, &(pInfo->idTexture[i]));

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

		m_vct3DSimpleObjInfo.push_back(pInfo);
	}

	fclose(fp);
}

//---------------------------------------------------------------------
C3DSimpleObjInfo* C3DRoleData::Get3DSimpleObjInfo(OBJID idType)
{
	int nInfos = m_vct3DSimpleObjInfo.size();
	for (int i=0; i<nInfos; i++)
	{
		C3DSimpleObjInfo* pInfo = m_vct3DSimpleObjInfo[i];
		if(pInfo && idType == pInfo->idType)
			return pInfo;
	}

	::ErrorMsg("3DSimpleObj [%u] not found!", idType);
	return m_vct3DSimpleObjInfo[0];
}

//---------------------------------------------------------------------
void C3DRoleData::DestroySimpleObjInfo()
{
	int nInfos = m_vct3DSimpleObjInfo.size();
	for (int i=0; i<nInfos; i++)
	{
		SAFE_DELETE(m_vct3DSimpleObjInfo[i]);
	}
	m_vct3DSimpleObjInfo.clear();
}
//---------------------------------------------------------------------
BOOL	C3DRoleData::Create2DNpcTypeInfo()
{
	return true;
}
//---------------------------------------------------------------------
void	C3DRoleData::Destroy2DNpcTypeInfo()
{
/*	int nAmount = m_set2DNpcType.size();
	for(int i = 0; i < nAmount; i ++)
	{
		Npc2DTypeInfo infoNpc = m_set2DNpcType[i];
		for(int i = 0; i < nAmount; i ++)
		{

		}
	}*/
}
//---------------------------------------------------------------------
BOOL	C3DRoleData::CreateTerrainNpcTypeInfo()
{
	CONST CHAR INI_FILE[] = "ini/TerrainNpc.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] = "";
		if (1 != sscanf(szLine, "[%s]", szTitle))
			continue;
		
		szTitle[strlen(szTitle)-1] = '\0';
		
		// get info ...
		TerrainNpcTypeInfo* pInfo = new TerrainNpcTypeInfo;
		MYASSERT(pInfo);
		pInfo->nType = atoi(szTitle+strlen("NpcType"));
		
		BOOL bSuc = true;
		bSuc &= fscanf(fp, "Name=%s\n", pInfo->szNpcName);
		for(int i = 0; i < 8; i ++)
		{
			char szFile[_MAX_PATH];
			int nDir;
			fscanf(fp, "Dir%d=%s\n", &nDir, szFile);
			string str = szFile;
			pInfo->setStr.push_back(str);
		}
		if (!bSuc)
		{
			::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
			break;
		}
		
		m_setTerrainNpcTypeInfo.push_back(pInfo);
	}
	
	fclose(fp);
	return true;
}
//---------------------------------------------------------------------
void	C3DRoleData::DestroyTerrainNpcTypeInfo()
{
	int nAmount = m_setTerrainNpcTypeInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainNpcTypeInfo* pInfo = m_setTerrainNpcTypeInfo[i];
		if(pInfo)
		{
			pInfo->setStr.clear();
			SAFE_DELETE(pInfo);
		}
	}
	m_setTerrainNpcTypeInfo.clear();
}
//---------------------------------------------------------------------
BOOL C3DRoleData::CreateNpcTypeInfo()
{
	CONST CHAR INI_FILE[] = "ini/Npc.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] = "";
		if (1 != sscanf(szLine, "[%s]", szTitle))
			continue;

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

		// get info ...
		NpcTypeInfo* pInfo = new NpcTypeInfo;
		MYASSERT(pInfo);
		pInfo->nType = atoi(szTitle+strlen("NpcType"));

		BOOL bSuc = true;
		bSuc &= fscanf(fp, "Name=%s\n", pInfo->szNpcName);
		bSuc &= fscanf(fp, "SimpleObjID=%u\n", &pInfo->idSimpleObj);
		bSuc &= fscanf(fp, "StandByMotion=%u\n", &pInfo->idMotionStandBy);
		bSuc &= fscanf(fp, "BlazeMotion=%u\n", &pInfo->idMotionBlaze);
		bSuc &= fscanf(fp, "BlazeMotion1=%u\n", &pInfo->idMotionBlaze1);
		bSuc &= fscanf(fp, "BlazeMotion2=%u\n", &pInfo->idMotionBlaze2);
		bSuc &= fscanf(fp, "RestMotion=%u\n", &pInfo->idMotionRest);
		bSuc &= fscanf(fp, "Effect=%s\n", pInfo->szEffectIndex);
		pInfo->nZoomPercent = 100;
		strcpy(pInfo->szNpcTitle, "");
		fscanf(fp, "ZoomPercent=%d\n", &pInfo->nZoomPercent);
		fscanf(fp, "Note=%s\n", &pInfo->szNpcTitle);
		if(strcmp(pInfo->szNpcTitle, "NULL") == 0)
			strcpy(pInfo->szNpcTitle, "");
		pInfo->bMouseSign = 1;
		fscanf(fp, "MouseSign=%d\n", &pInfo->bMouseSign);

		pInfo->bChangeDir = true;
		fscanf(fp, "ChangeDir=%d\n", &pInfo->bChangeDir);

		pInfo->nFront = pInfo->nBack = pInfo->nLeft = pInfo->nRight = 0;
		fscanf(fp, "FrontBlock=%d\n", &pInfo->nFront);
		fscanf(fp, "BackBlock=%d\n", &pInfo->nBack);
		fscanf(fp, "LeftBlock=%d\n", &pInfo->nLeft);
		fscanf(fp, "RightBlock=%d\n", &pInfo->nRight);
		
		if (!bSuc)
		{
			::ErrorOut("error data: %s of %s", szTitle, INI_FILE);
			break;
		}

		m_setNpcType.push_back(pInfo);
	}

	fclose(fp);
	return true;
}
//---------------------------------------------------------------------
void C3DRoleData::DestroyNpcTypeInfo()
{
	int nAmount = m_setNpcType.size();
	for(int i = 0; i < nAmount; i ++)

⌨️ 快捷键说明

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