📄 reinforcemanager.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 + -