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

📄 uniquemanager.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
字号:
//	UniqueManager.cpp: implementation of the UniqueManager class.
//
//
//
//
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"

#include "command.h"
#include "UniqueManager.h"
#include "MapDBAccess.h"				// DATA BASE 
#include "Map.h"
#include "DBSocket.h"

#include "../Parameter/Item.h"

////////////////////////////////////////////////////////////////////////////////////////
//	Global 函荐
////////////////////////////////////////////////////////////////////////////////////////
extern	CDBConnection	g_AccountDB;	//	AccountDB
extern _LPDBSOCK		g_lpDBSock ;	//	DB Socket
extern	Map				*g_pMap;		//	MAP

////////////////////////////////////////////////////////////////////////////////////////
//	Construction / Destruction
//
//	-	UNIQUE ITEM狼 扁夯 沥焊甫 CHART-DB俊辑 佬绢咳
////////////////////////////////////////////////////////////////////////////////////////
UniqueManager::UniqueManager()
{
	m_nDropCount		=	0;								//	靛酚登绰 蜡聪农 酒捞袍 醚箭磊
	memset( m_tDropTable, 0x00, sizeof(m_tDropTable)	);	//	靛酚登绰 蜡聪农 酒捞袍 Table


	m_MapUniqueChart.Clear();

	Table_UniqueItemChart tbUniqueChart;

	if( tbUniqueChart.Open( &g_AccountDB ))
	{
		while( tbUniqueChart.Fetch() )
		{	
			_UNIQUE_CHART_ *pUniqueChart = new _UNIQUE_CHART_;

			memcpy( pUniqueChart, &tbUniqueChart.UniqueChart, sizeof(_UNIQUE_CHART_) );
			m_MapUniqueChart.Insert( pUniqueChart->wSEQ,  pUniqueChart );
			pUniqueChart->wCOUNT	=	0;	//	积己 肮荐绰 World Server俊辑 沥焊甫 掘澜

#ifdef DEF_UNIQUEITEMDROP_FIX

			// 矫埃 拌魂阑 困秦 CTIME 函荐肺 蔼阑 持绰促.

			CTime tEndTime( pUniqueChart->tENDDBTIME.year	,	
				pUniqueChart->tENDDBTIME.month		,	
				pUniqueChart->tENDDBTIME.day			,
				pUniqueChart->tENDDBTIME.hour			,
				pUniqueChart->tENDDBTIME.minute		,
				pUniqueChart->tENDDBTIME.second		);

			CTime tStartTime( pUniqueChart->tSTARTDBTIME.year	,	
				pUniqueChart->tSTARTDBTIME.month		,	
				pUniqueChart->tSTARTDBTIME.day			,
				pUniqueChart->tSTARTDBTIME.hour			,
				pUniqueChart->tSTARTDBTIME.minute		,
				pUniqueChart->tSTARTDBTIME.second		);


			pUniqueChart->tENDTIME = tEndTime ;
			pUniqueChart->tSTARTTIME = tStartTime ;

			// 蜡聪农 靛而 矫埃捞 瘤唱绰 版快绰 酒捞袍捞 歹捞惑 冻绢瘤瘤 臼绰促. 
			if( CTime::GetCurrentTime() > pUniqueChart->tENDTIME) 
			{
				pUniqueChart->bCANITEMDROP = FALSE ;
			}
#endif 
			//
			//	Drop矫懦 酒捞袍 府胶飘 掘澜
			//
			if( pUniqueChart->nENABLE )
			{
				m_tDropTable[ m_nDropCount ] = pUniqueChart->wSEQ;

				m_nDropCount ++;
			}
		}
	}	
	

}

UniqueManager::~UniqueManager()
{
	//
	//	Clean UNIQUE CHART
	//
	for ( MAP_VOIDPTR::iterator it = m_MapUniqueChart.Begin(); it != m_MapUniqueChart.End(); it++)
	{
		_UNIQUE_CHART_ *pUniqueChart = (_UNIQUE_CHART_ *)it->second;
		if( !pUniqueChart ) continue;

		SAFE_DELETE<_UNIQUE_CHART_> (&pUniqueChart);
	}

	m_MapUniqueChart.Clear();
}

////////////////////////////////////////////////////////////////////////////////////////
//	Return The UNIQUE CHRT 
//
////////////////////////////////////////////////////////////////////////////////////////
_UNIQUE_CHART_ * UniqueManager::UniqueChartFind(int pUniqueBase)
{
	return (_UNIQUE_CHART_ *)m_MapUniqueChart.Find( pUniqueBase );
}


#ifdef DEF_UNIQUEITEM

////////////////////////////////////////////////////////////////////////////////////////
//	蜡聪农	酒捞袍	积己
//
//	-	
////////////////////////////////////////////////////////////////////////////////////////
CItem *UniqueManager::CreateUniqueItem()
{		
	if(m_nDropCount == 0  ) return NULL ;
	
	_UNIQUE_CHART_ *pUniqueChart = UniqueChartFind( m_tDropTable[  rand()% m_nDropCount ] );
	if( !pUniqueChart )	return NULL;

#ifdef DEF_UNIQUEITEMDROP_FIX
	// 蜡聪农 靛而 醚荐甫 逞菌芭唱 靛而 矫埃捞 瘤唱绰 版快绰 靛而捞 登瘤 臼绰促. 
	if(pUniqueChart->bCANITEMDROP == FALSE  )	return NULL ;

	// 泅犁 矫埃 啊廉柯促.
	CTime tNowTime = CTime::GetCurrentTime();

	// 蜡聪农 靛而 矫累 矫埃捞 登绢具 酒捞袍捞 冻绢柳促. 
	if( tNowTime < pUniqueChart->tSTARTTIME) return NULL ;
#endif

	
	//
	//	扁夯 靛酚伏 犬牢 
	//
	if( !CheckDropProbaility( pUniqueChart->fDROPRATE )	)	return NULL;

#ifdef DEF_UNIQUEITEMDROP_FIX
	// 蜡聪农 靛而 矫埃捞 瘤唱绰 版快绰 酒捞袍捞 歹捞惑 冻绢瘤瘤 臼绰促. 
	if( tNowTime > pUniqueChart->tENDTIME) 
	{
		pUniqueChart->bCANITEMDROP = FALSE ;

		return NULL ;
	}

	// 蜡聪农 醚 靛而 俺荐啊 逞芭唱 鞍篮 版快 
	if( pUniqueChart->wCOUNT >= pUniqueChart->wMAXCOUNT ) 
	{
		pUniqueChart->bCANITEMDROP = FALSE ;
		
		return NULL ;
	}
#endif 


	int	nOverDropCount =   pUniqueChart->wCOUNT - pUniqueChart->wDROPCOUNT + 1;	


	if( nOverDropCount > 0  )
	{
		for( int i=0; i<nOverDropCount; ++i )
		{
			if( !CheckDropProbaility( pUniqueChart->fCONSTANT )	)	return NULL;
		}		
	}

	//
	//	蜡聪农 酒捞袍 积己
	//
	CItem *pNewItem = (CItem *)g_pMap->Pool_Item_Pop();		//	ITEM按眉甫 积己

	if( !pNewItem )	return	NULL;
	
	
	if( ! pNewItem->CreateUniqueItem( pUniqueChart->wSEQ ) )
	{
		g_pMap->Pool_Item_Push( pNewItem );
		return NULL;
	}

	//
	//	World Server俊 酒捞袍 积己 荤角阑 烹焊窃
	//
	g_lpDBSock->WorldSend_UniqueItemCreate(  pUniqueChart->wSEQ );
	
	return pNewItem;
}

#endif


////////////////////////////////////////////////////////////////////////////////////////
//	蜡聪农 酒捞袍 肮荐甫 涝仿矫糯
//
////////////////////////////////////////////////////////////////////////////////////////
void UniqueManager::SetUniqueList(_LPDBPACKET pWorldPacket)
{
	char *lpReadData	=	pWorldPacket->strPacket;

	WORD *lpReadNum		=	(WORD *) lpReadData ;
	WORD  nReadNum		=	(WORD)	(*lpReadNum);
	lpReadData			+=	sizeof(WORD);

	//
	//	酒瘤飘 沥焊甫 涝仿 矫糯 	
	//
	while ((nReadNum)-- > 0 )
	{
		_LPZW_UNIQUEITEMLIST_REP pUniqueData  = (_LPZW_UNIQUEITEMLIST_REP ) lpReadData ;	

		
		//
		//	酒瘤飘啊 粮犁 窍绰 版快 贸府
		//		
		_UNIQUE_CHART_ *pUniqueChart = (_UNIQUE_CHART_ *)m_MapUniqueChart.Find( pUniqueData->dwSeq );

		//
		//	酒瘤飘啊 积己登绢 乐绰 版快
		//
		if( pUniqueChart )
		{
			pUniqueChart->wCOUNT	=	pUniqueData->dwCount;
		}

		lpReadData += sizeof(_ZW_UNIQUEITEMLIST_REP) ;
	}
}

////////////////////////////////////////////////////////////////////////////////////////
//	蜡聪农 酒捞袍 沥焊甫 诀单捞飘 矫糯
//
//	
////////////////////////////////////////////////////////////////////////////////////////
void UniqueManager::SetUniqueUpdate(_LPZW_UNIQUEITEMUPDATE_REP pPacket)
{
	_UNIQUE_CHART_ *pUnique = UniqueChartFind( pPacket->dwSeq );
	if( !pUnique )	return;

	pUnique->wCOUNT	=	pPacket->dwCount;		
}


////////////////////////////////////////////////////////////////////////////////////////
//	秦寸 备埃狼 酒捞袍 粮犁 咯何
//
//
////////////////////////////////////////////////////////////////////////////////////////
bool UniqueManager::CheckDropProbaility(float pRate)
{
	if(  ( rand() % 1000 * 0.001 )	 > pRate )	return false;

	return true;
}

⌨️ 快捷键说明

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