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

📄 reinforcemanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// ReinforceManager.cpp: implementation of the CReinforceManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ReinforceManager.h"
#include "..\[CC]Header\GameResourceStruct.h"
#include "MHFile.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CReinforceManager::CReinforceManager()
{
	m_ReinforceItemInfoList.Initialize( eRJP_MAX );
}

CReinforceManager::~CReinforceManager()
{
	Release();
}

BOOL CReinforceManager::Init()
{
	srand( GetTickCount() );
	if( m_ReinforceItemInfoList.GetDataNum() != 0  )
		Release();

	ZeroMemory( m_fTableAbility, sizeof(float)*MAX_RTL_ABILITY*MAX_REINFORCE );
	ZeroMemory( m_fTableMaterial, sizeof(float)*MAX_RTL_MATERIAL*MAX_REINFORCE );
	ZeroMemory( m_fTableItemLevel, sizeof(float)*MAX_RTL_ITEMLEVEL*MAX_REINFORCE );
	ZeroMemory( m_fTableAdjust, sizeof(float)*MAX_REINFORCE );

	if( !LoadReinforceInfo() )
	{
		ASSERTMSG( 0, "LoadReinforceInfo(): ScriptError" );
		return FALSE;
	}
//	if( !LoadReinforceTable() )
//	{
//		ASSERTMSG( 0, "LoadReinforceTable(): ScriptError" );
//		return FALSE;
//	}

	return TRUE;
}

void CReinforceManager::Release()
{
	sITEM_REINFORCE_INFO* pInfo = NULL;

	m_ReinforceItemInfoList.SetPositionHead();
	while( pInfo = m_ReinforceItemInfoList.GetData() )
	{
		delete pInfo;
	}

	m_ReinforceItemInfoList.RemoveAll();
}

BOOL CReinforceManager::LoadReinforceInfo()
{
	CMHFile file;

#ifdef _FILE_BIN_	
	if( !file.Init( "./Resource/itemReinforceList.bin", "rb" ) )		return FALSE;
#else
	if( !file.Init( "./Resource/itemReinforceList.txt", "rt" ) )		return FALSE;
#endif

	while(1)
	{
		if(file.IsEOF())
			break;

		WORD tempItemIdx		= file.GetWord();
		WORD tempReinforceType	= file.GetWord();
		float tempMaxReinforce	= file.GetFloat();
		float tempW				= file.GetFloat();

		if( tempItemIdx != 0 && tempReinforceType != 0 && tempMaxReinforce > 0.0f && tempW > 0.0f
			&& m_ReinforceItemInfoList.GetData( tempItemIdx ) == NULL )
		{
			sITEM_REINFORCE_INFO* pInfo = new sITEM_REINFORCE_INFO;
			pInfo->wItemIdx			= tempItemIdx;
			pInfo->ReinforceType	= tempReinforceType;
			pInfo->fMaxReinforce	= tempMaxReinforce;
			pInfo->fw				= tempW;
			m_ReinforceItemInfoList.Add( pInfo, pInfo->wItemIdx );
		}
		else	//error
		{
			if( file.IsEOF())
				break;
			file.Release();
			return FALSE;
		}
	}

	file.Release();
	return TRUE;
}


BOOL CReinforceManager::LoadReinforceTable()
{
	CMHFile file;

#ifdef _FILE_BIN_
	if( !file.Init( "./Resource/item_powerup.bin", "rb" ) )		return FALSE;
#else
	if( !file.Init( "./Resource/item_powerup.txt", "rt" ) )		return FALSE;
#endif
	
	int i, j;
	float fCheckSum;	//犬伏狼 钦捞 100捞 登绰瘤 犬牢

	//--漂扁俊 蝶弗 碍拳 抛捞喉
	for( i = 0 ; i < MAX_RTL_ABILITY ; ++i )
	{
		fCheckSum = 0.0f;
		for( j = 0 ; j < MAX_REINFORCE ; ++j )
		{
			if( file.IsEOF() )
			{
				file.Release();
				return FALSE;
			}

			m_fTableAbility[i][j] = file.GetFloat();
			fCheckSum += m_fTableAbility[i][j];
		}

		if( fCheckSum >= 100.1f )
		{
			ASSERTMSG( 0, "LoadReinforceTable: Over 100%" );
		}
	}

	//--犁丰俊 蝶弗 碍拳 抛捞喉
	for( i = 0 ; i < MAX_RTL_MATERIAL ; ++i )
	{
		fCheckSum = 0.0f;
		for( j = 0 ; j < MAX_REINFORCE ; ++j )
		{
			if( file.IsEOF() )
			{
				file.Release();
				return FALSE;
			}

			m_fTableMaterial[i][j] = file.GetFloat();
			fCheckSum += m_fTableMaterial[i][j];
		}

		if( fCheckSum >= 100.1f )
		{
			ASSERTMSG(0,"LoadReinforceTable: Over 100%");
		}
	}

	//--酒捞袍饭骇俊 蝶弗 碍拳 抛捞喉
	for( i = 0 ; i < MAX_RTL_ITEMLEVEL ; ++i )
	{
		fCheckSum = 0.0f;
		for( j = 0 ; j < MAX_REINFORCE ; ++j )
		{
			if( file.IsEOF() )
			{
				file.Release();
				return FALSE;
			}

			m_fTableItemLevel[i][j] = file.GetFloat();
			fCheckSum += m_fTableItemLevel[i][j];
		}

		if( fCheckSum >= 100.1f )
		{
			ASSERTMSG(0,"LoadReinforceTable: Over 100%");
		}
	}

	//--碍拳 沥档 炼例磊
	{
		fCheckSum = 0.0f;
		for( j = 0 ; j < MAX_REINFORCE ; ++j )
		{
			if( file.IsEOF() )
			{
				file.Release();
				return FALSE;
			}

			m_fTableAdjust[j] = file.GetFloat();
			fCheckSum += m_fTableAdjust[j];
		}

		if( fCheckSum >= 100.1f )
		{
			ASSERTMSG(0,"LoadReinforceTable: Over 100%");
		}
	}

	file.Release();		
	return TRUE;
}

sITEM_REINFORCE_INFO* CReinforceManager::GetReinforceInfo( WORD wItemIdx )
{
	return m_ReinforceItemInfoList.GetData( wItemIdx );
}


BOOL CReinforceManager::CheckValidMaterial( WORD wReinforceItemIdx, WORD wMaterialItemIdx )
{
	eITEM_KINDBIT eKindItem		= GetItemKind( wReinforceItemIdx );
	eITEM_KINDBIT eKindMaterial = GetItemKind( wMaterialItemIdx );

	if( !(eKindItem & eEQUIP_ITEM) ) return FALSE;
	if( !(eKindMaterial & eEXTRA_ITEM_JEWEL) ) return FALSE;

	sITEM_REINFORCE_INFO* pInfo = GetReinforceInfo(wMaterialItemIdx);
	if( pInfo == NULL ) return FALSE;

	WORD ReinforceType = pInfo->ReinforceType;

	switch( eKindItem )
	{
	case eEQUIP_ITEM_RING:
	case eEQUIP_ITEM_NECKLACE:
		if( ReinforceType == eRJP_FIREATTACK ||
			ReinforceType == eRJP_WATERATTACK ||
			ReinforceType == eRJP_TREEATTACK ||
			ReinforceType == eRJP_GOLDATTACK ||
			ReinforceType == eRJP_EARTHATTACK )
			return TRUE;
		break;

	case eEQUIP_ITEM_ARMLET:
	case eEQUIP_ITEM_CAPE:
	case eEQUIP_ITEM_BELT:
		if( ReinforceType == eRJP_FIREREGIST ||
			ReinforceType == eRJP_WATERREGIST ||
			ReinforceType == eRJP_TREEREGIST ||
			ReinforceType == eRJP_GOLDREGIST ||
			ReinforceType == eRJP_EARTHREGIST )
			return TRUE;
		break;

	case eEQUIP_ITEM_SHOES:
		if( ReinforceType == eRJP_GENGOL ||
			ReinforceType == eRJP_MINCHUB ||
			ReinforceType == eRJP_CHERYUK ||
			ReinforceType == eRJP_SIMMEK )
			return TRUE;
		break;

	case eEQUIP_ITEM_DRESS:
		if( ReinforceType == eRJP_LIFE ||
			ReinforceType == eRJP_NAERYUK ||
			ReinforceType == eRJP_SHIELD )
			return TRUE;
		break;

	case eEQUIP_ITEM_WEAPON:
		if( ReinforceType == eRJP_PHYATTACK ||
			ReinforceType == eRJP_CRITICAL )
			return TRUE;
		break;

	case eEQUIP_ITEM_HAT:
		if( ReinforceType == eRJP_PHYDEFENSE )
			return TRUE;
		break;
	}	

	return FALSE;
}

WORD CReinforceManager::GetValueForAbility( WORD wAbilGrade )
{
	float fSeed = (float)(rand()%10000 + 1) / 100.0f;	//家荐 2掳楼府鳖瘤 犬伏

	float fSum = 0.0f;

	for( int i = 0 ; i < MAX_REINFORCE ; ++i )
	{
		fSum += m_fTableAbility[wAbilGrade-1][i];
		if( fSeed < fSum )
		{
			return i+1;
		}		
	}

	return MAX_REINFORCE;
}

WORD CReinforceManager::GetValueForMaterialNum( WORD wMaterialNum )
{
	float fSeed = (float)(rand()%10000 + 1) / 100.0f;	//家荐 2掳楼府鳖瘤 犬伏

	float fSum = 0.0f;

	for( int i = 0 ; i < MAX_REINFORCE ; ++i )
	{
		fSum += m_fTableMaterial[wMaterialNum-1][i];
		if( fSeed < fSum )
		{
			return i+1;
		}		
	}

	return MAX_REINFORCE;
}

WORD CReinforceManager::GetValueForItemLevel( WORD wItemLevel )
{
	float fSeed = (float)(rand()%10000 + 1) / 100.0f;	//家荐 2掳楼府鳖瘤 犬伏

	float fSum = 0.0f;

	for( int i = 0 ; i < MAX_REINFORCE ; ++i )
	{
		fSum += m_fTableItemLevel[wItemLevel-1][i];
		if( fSeed < fSum )
		{
			return i+1;
		}		
	}

	return MAX_REINFORCE;
}

WORD CReinforceManager::GetAdjustValue()
{
	float fSeed = (float)(rand()%10000 + 1) / 100.0f;	//家荐 2掳楼府鳖瘤 犬伏

	float fSum = 0.0f;

	for( int i = 0 ; i < MAX_REINFORCE ; ++i )
	{
		fSum += m_fTableAdjust[i];
		if( fSeed < fSum )
		{
			return i+1;
		}		
	}

	return MAX_REINFORCE;
}

⌨️ 快捷键说明

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