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

📄 rareeffectmgr.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		DR.iRareTime2	= 0;
		DR.cRareType2	= 0;
		DR.iValue2		= 0;
	}
	if( DR.iRareTime3 && (g_curr_time > DR.iRareTime3))
	{
		DR.iRareTime3	= 0;
		DR.cRareType3	= 0;
		DR.iValue3		= 0;
	}
	return;
}

int	 CRareEffectMgr::GetRareDisplayEffectNo(const bool bIsDynamicRare,const DYNAMICRAREEFFECT &DR)const	// 荤侩等 捞棋飘 锅龋
{
	if(bIsDynamicRare)
	{
		return ItemFunction[DR.cRareType1].iEffectNo;
	}
	return 0;
}
int	 CRareEffectMgr::GetRareDisplayEffectTime(const DYNAMICRAREEFFECT &DR)const	// 蜡瘤矫埃
{
	if( DR.iRareTime1 && g_curr_time <= DR.iRareTime1)
	{
		return DR.iRareTime1 - g_curr_time;
	}
	return 0;
}

bool CRareEffectMgr::IsHaveRivaval(void *ch)
{
	CHARLIST *Caster = (CHARLIST *)ch;
	if(!Caster) {return false;}
	for(int i=0; i < ITEM_QUICK_MAX; i++)
	{
		ITEMATTR &rItem = Caster->quick[i];
		const int iFuncItem = ItemMgr.GetStaticFunctionNo(rItem);
		
		if(iFuncItem == FITEM_REVIVAL)
		{
			::SendItemEventLog( &rItem, Caster->GetServerID(), SN_NOT_USER, SILT_USE, 3 ); //YGI acer
			
			const int iResult = ItemMgr.DecItemDur(rItem,MULTIPLE_USE_ONE_TIME_DEC_DUR);// 荤侩茄扒 郴备档甫 别绰促
			POS pos={0,};
			::SetItemPos( QUICK, i, &pos );
			::SendServerEachItem(&pos,&rItem,Caster->GetServerID());

			return true;
		}
	}
	return false;
}

int CRareEffectMgr::LoadItem_Multi_Rare_Table()
{
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;

	SQLAllocStmt(hDBC, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from Item_MultiRare order by [Grade]", SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		int i = 0;
		retCode = SQLFetch(hStmt);
/*
		typedef struct ITEMSKILLMASTER
		{
			int iGrade;
			int iAble;
			int aItemNo[7];//0 官捞, 1 磊捞, 老胶
			int aItemCt[7];//0 官捞, 1 磊捞, 老胶
			int	iAddCt;
		}t_ItemSkillMaster,*LPITEMSKILLMASTER;
*/
		while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
		{
			if(i >= MAX_ITEM_MULTI_RARE)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			int column = 0;
			int iIndex = 0;
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&iIndex,	0, &cbValue);
			if(0>iIndex ||MAX_ITEM_MULTI_RARE<= iIndex)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			m_MRData[iIndex].iGrade = iIndex;
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].iAble,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[0],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[1],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[2],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[3],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[4],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[5],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemNo[6],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[0],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[1],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[2],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[3],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[4],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[5],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].aItemCt[6],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_MRData[iIndex].iAddCt   ,	0, &cbValue);
			i++;
			retCode = SQLFetch(hStmt);
			if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
			{
			}
			else if( retCode == SQL_NO_DATA ) 
			{
				break;
			}
			else
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
		}
	}
	else 
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return false;
	}
	SQLFreeStmt(hStmt, SQL_DROP);		// 0308 YGI
	return true;
}

int		CRareEffectMgr::LoadItem_Legend_Table()
{
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;

	SQLAllocStmt(hDBC, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from Item_Legend order by [no]", SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		int i = 0;
		retCode = SQLFetch(hStmt);
		const int iMaxLine = MAX_ITEM_LEGEND*MAX_ITEM_LEGEND_SUB;

		while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
		{
			if(i >= iMaxLine)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			int column = 0;
			int iIndex = 0;
			int iGNo	= 0;
			int iGIndex = 0;
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&iIndex,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&iGNo,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&iGIndex,	0, &cbValue);
			if(0>iGNo ||MAX_ITEM_LEGEND<= iGNo)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			if(0>iGIndex ||MAX_ITEM_LEGEND_SUB<= iGIndex)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&m_aItemLegend[iGNo].iGroupIndexMax   ,	0, &cbValue);

			m_aItemLegend[iGNo].iNo			= iIndex;
			m_aItemLegend[iGNo].iGroupNo	= iGNo;
			LPITEMLEGENDSUB pTemp = &m_aItemLegend[iGNo].aSub[iGIndex];
			pTemp->iGroupIndex = iGIndex;
			pTemp->iGroupMax = m_aItemLegend[iGNo].iGroupIndexMax;

			retCode = SQLGetData(hStmt, ++column, SQL_C_CHAR,	pTemp->szName   ,	20, &cbValue);
			EatRearWhiteChar(pTemp->szName);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iNeeds	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWARHand2	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWALHand3	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWAHead4	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWABody5	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWANeck6	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWAShoe7	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWAUnique8	,	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->iWATwoHand10	,	0, &cbValue);	
			
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiBonus[0]	,	0, &cbValue);	
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiBonus[1]	,	0, &cbValue);	
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiBonus[2]	,	0, &cbValue);	
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiBonus[3]	,	0, &cbValue);	

			i++;
			retCode = SQLFetch(hStmt);
			if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
			{
			}
			else if( retCode == SQL_NO_DATA ) 
			{
				break;
			}
			else
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
		}
	}
	else 
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return false;
	}
	SQLFreeStmt(hStmt, SQL_DROP);		// 0308 YGI
	FILE *fp = fopen( "./output/Item_Legend.bin", "wb" );
	if( fp ) 
	{
		fwrite( m_aItemLegend, sizeof(ITEM_LEGEND)*MAX_ITEM_LEGEND, 1, fp );
		fclose( fp );
	}
	return true;
}

int		CRareEffectMgr::LoadItem_Legend_Bonus_Item()
{
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;

	SQLAllocStmt(hDBC, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from Item_Legend_Bonus order by [No]", SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		int i = 0;
		retCode = SQLFetch(hStmt);

		while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
		{
			if(i >= MAX_ITEM_LEGEND_BONUS)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			int column = 0;
			int iIndex = 0;
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&iIndex,	0, &cbValue);
			if(0>iIndex ||MAX_ITEM_LEGEND_BONUS<= iIndex)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			m_aLegendBonus[iIndex].iNo = iIndex;
			
			LPITEMLEGENDBONUS pTemp = &m_aLegendBonus[iIndex];
			
			retCode = SQLGetData(hStmt, ++column, SQL_C_CHAR,	pTemp->szName,	20, &cbValue);
			EatRearWhiteChar(pTemp->szName);

			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiKind[0],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiKind[1],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiKind[2],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiKind[3],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiKind[4],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiKind[5],	0, &cbValue);
			
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiGrade[0],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiGrade[1],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiGrade[2],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiGrade[3],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiGrade[4],	0, &cbValue);
			retCode = SQLGetData(hStmt, ++column, SQL_C_LONG,	&pTemp->aiGrade[5],	0, &cbValue);

			i++;
			retCode = SQLFetch(hStmt);
			if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
			{
			}
			else if( retCode == SQL_NO_DATA ) 
			{
				break;
			}
			else
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
		}
	}
	else 
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return false;
	}
	SQLFreeStmt(hStmt, SQL_DROP);		// 0308 YGI
	
	FILE *fp = fopen( "./output/Item_Legend_Bonus.bin", "wb" );
	if( fp ) 
	{
		fwrite( m_aLegendBonus, sizeof(ITEM_LEGEND_BONUS)*MAX_ITEM_LEGEND_BONUS, 1, fp );
		fclose( fp );
	}
	return true;
}

int CRareEffectMgr::GetAbleGroupIndex(const int iGroupNo)
{	
	if(0>iGroupNo || MAX_ITEM_LEGEND < iGroupNo)
	{
		return 0;
	}
	const int iMax = m_aItemLegend[iGroupNo].iGroupIndexMax;
	
	return ((iMax)?(rand()%iMax)+1:0);
}

int CRareEffectMgr::GetLegendBasicRareKind(const int iGroupNo,const int iGroupIndex,const int iWearAble)
{	
	if(0>iGroupNo || MAX_ITEM_LEGEND < iGroupNo){return 0;}
	if(0>iGroupIndex || MAX_ITEM_LEGEND_SUB < iGroupIndex){return 0;}
	int iRareKind = 0;
	switch(iWearAble)
	{
	case WEAR_RIGHT_HAND:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWARHand2;
		}break;
	case WEAR_LEFT_HAND	:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWALHand3;
		}break;
	case WEAR_HEAD		:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWAHead4;
		}break;
	case WEAR_BODY		:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWABody5;
		}break;
	case WEAR_NECK		:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWANeck6;
		}break;
	case WEAR_SHOES		:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWAShoe7;
		}break;
	case WEAR_UNIQUE	:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWAUnique8;
		}break;
	case WEAR_TWO_HAND	:
		{
			iRareKind = m_aItemLegend[iGroupNo].aSub[iGroupIndex].iWATwoHand10;
		}break;
	default:
		{
		}break;
	}
	return iRareKind;
}

⌨️ 快捷键说明

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