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

📄 symbolitemmgr.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
字号:
// SymbolItemMgr.cpp: implementation of the CSymbolItemMgr class.
//
//////////////////////////////////////////////////////////////////////

#include "..\stdafx.h"
#include "SymbolItemMgr.h"
#include "RareEffectMgr.h"
#include "Scrp_exe.h"


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

CSymbolItemMgr g_CSymbolMgr;

CSymbolItemMgr::CSymbolItemMgr(HDBC hDragonDB, HDBC hChrLogDB)
{
	Init(hDragonDB,hChrLogDB);
}
CSymbolItemMgr::CSymbolItemMgr()
{
	Init();	
}
void CSymbolItemMgr::Init(HDBC hDragonDB, HDBC hChrLogDB)
{
	InitDBHandle(hDragonDB,hChrLogDB);
	m_vtSymbolItemList.clear();
	m_vtSymbolItemList.reserve(MAX_SYMBOL_ITEM); // 沥狼等 缴杭酒捞袍狼 肮荐父怒父 且寸秦霖促.
	m_nAttrMaxCount = 0;
}

CSymbolItemMgr::~CSymbolItemMgr()
{
	DestroyAllObject();
}


void CSymbolItemMgr::InitDBHandle(HDBC hDragonDB, HDBC hChrLogDB)
{
	m_hDragonDB = hDragonDB;
	m_hChrLogDB = hChrLogDB;
	m_nAttrMaxCount = 0;
}

bool CSymbolItemMgr::LoadTable()
{
	if(m_hDragonDB == NULL)return false;
	
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;
	char		szQuerry[512];
	
	sprintf(szQuerry, "SELECT * FROM Item_Symbol");
	SQLAllocStmt(m_hDragonDB, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);

	if (!SQLOK(retCode))
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return false;
	}

//< Item_Symbol 抛捞喉 肺靛
	for(int nItemCount = 0;nItemCount < MAX_SYMBOL_ITEM; nItemCount++)
	{
		retCode = SQLFetch(hStmt);
	
		if(!SQLOK(retCode))
		{
			SQLFreeStmt(hStmt, SQL_DROP);
			return false;
		}

		SYMBOL_ITEM	Item; memset(&Item,0,sizeof(SYMBOL_ITEM));

		for(int nFieldCount = 0;nFieldCount < 8 ; nFieldCount++)
		{
			switch(nFieldCount + 1)
			{
			case 3:
				retCode = SQLGetData(hStmt,nFieldCount+1,SQL_C_CHAR,Item.strName,MAX_NAME_LENGTH,&cbValue);
				break;
			case 4:
				retCode = SQLGetData(hStmt,nFieldCount+1,SQL_C_CHAR,Item.strHanName,MAX_NAME_LENGTH,&cbValue);
				break;
			case 5:
				retCode = SQLGetData(hStmt,nFieldCount+1,SQL_C_LONG,&Item.nFirst_Class,0,&cbValue);
				break;
			case 6:
				retCode = SQLGetData(hStmt,nFieldCount+1,SQL_C_LONG,&Item.nSecond_Class,0,&cbValue);
				break;
			}

			if (!SQLOK(retCode))
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}

		}
			

		int nAttrIndex = 0;
		for(;nFieldCount < 8 + MAX_APPLY_ATTR;++nFieldCount,++nAttrIndex)
		{
			retCode = SQLGetData(hStmt,nFieldCount+1,SQL_C_LONG,&(Item.anAplly_Attr[nAttrIndex]),0,&cbValue);

			if (!SQLOK(retCode))
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}
			
			if(Item.anAplly_Attr[nAttrIndex] > 0) //加己鞘靛俊 蔼捞 乐栏搁.
			{
				m_nAttrMaxCount = __max(m_nAttrMaxCount,nAttrIndex+1);
			}
		}

		m_vtSymbolItemList.push_back(Item);
	}

	SQLFreeStmt(hStmt, SQL_DROP);
//> Item_Symbol 抛捞喉 肺靛	场.


//< Item_Symbol_AbilityX 抛捞喉甸 肺靛
	for(int i = 0;i < m_nAttrMaxCount;i++)//加己狼 静牢 加己抛捞喉狼 肮荐 父怒 抛捞喉捞 鞘夸窍促.
	{
		sprintf(szQuerry, "SELECT * FROM Item_Symbol_Ability%d",i+1);
		SQLAllocStmt(m_hDragonDB, &hStmt);
		retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
		if (!SQLOK(retCode))
		{
			SQLFreeStmt(hStmt, SQL_DROP);
			return false;
		}

		SYMBOL_VALUE_LIST	ValueList; ValueList.clear();
				
		for(int nLevelCount = 0;nLevelCount < MAX_SYMBOL_LEVEL;nLevelCount++)
		{
			retCode = SQLFetch(hStmt);
			if (!SQLOK(retCode))
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return false;
			}

			SYMBOL_VALUE	Value; memset(&Value,0,sizeof(Value));
			for(int nFieldCount = 0;nFieldCount < MAX_SYMBOL_ITEM;nFieldCount++)
			{
				retCode = SQLGetData(hStmt,nFieldCount+1,SQL_C_LONG,&(Value.anAttrValue[nFieldCount]),0,&cbValue);
				if (!SQLOK(retCode))
				{
					SQLFreeStmt(hStmt, SQL_DROP);
					return false;
				}
			}
			
			ValueList.push_back(Value);
		}

		m_vtSymbolApplyAttrList.push_back(ValueList);
		
		SQLFreeStmt(hStmt, SQL_DROP);
	}
//> Item_Symbol_AbilityX 抛捞喉甸 肺靛 场.
	
	return true;
}

void CSymbolItemMgr::DestroyAllObject()
{
	m_vtSymbolItemList.clear();	
	m_vtSymbolApplyAttrList.clear();
}

bool CSymbolItemMgr::ExChangeSymbol(CHARLIST *pCharactor,int nFirstClass,int nSecondClass ,int nDualGrade)
{
	if(pCharactor->quick[5].item_no && nDualGrade == 1) //酒捞袍阑 贸澜 掘菌促.
	{
		for(int i = 0;i < m_nAttrMaxCount;i++)
		{
			int nAttr = GetRareNum(nFirstClass,nSecondClass,i);

			if(nAttr < 0)// Error捞促.
			{
				return false;
			}

			pCharactor->quick[6].attr[i] = nAttr;
		}
	}
	else // 酒捞袍 诀弊饭捞靛 捞促.
	{
				
	}	

	return true;
}

int CSymbolItemMgr::GetItemNumber(int n1StClass, int n2StClass)
{
	int nItemCount = m_vtSymbolItemList.size();
	
	if(nItemCount)
	{
		for(int i = 0; i < nItemCount ;i++)
		{
			if(m_vtSymbolItemList[i].nFirst_Class == n1StClass+1 && m_vtSymbolItemList[i].nSecond_Class == n2StClass+1)
			{
				return i+1;
			}
		}
	}
	return 0;
}
int CSymbolItemMgr::GetRareNum(int nFirstClass, int nSecondClass, int nRareIndex)
{
	int nItemCount = m_vtSymbolItemList.size();
	
	if(nItemCount && nRareIndex < m_nAttrMaxCount)
	{
		for(int i = 0; i < nItemCount ;i++)
		{
			if(m_vtSymbolItemList[i].nFirst_Class == nFirstClass+1 && m_vtSymbolItemList[i].nSecond_Class == nSecondClass+1)
			{
				return m_vtSymbolItemList[i].anAplly_Attr[nRareIndex];
			}
		}
	}

	return 0;
}

int CSymbolItemMgr::AddSymbolEffect(CHARLIST *pChar)
{
	int nItemNumber = pChar->quick[5].item_no;
	int	nDualGrade	= pChar->quick[5].attr[0];	//酒捞袍狼 殿鞭捞促.
	int	n1StClass	= pChar->Class;
	int	n2StClass	= pChar->GetDualClass();
	
	if(!nItemNumber || !nDualGrade)return 0;

	for(int i = 0;i < MAX_APPLY_ATTR;i++)
	{
		int nKind = GetRareNum(n1StClass,n2StClass,i);
		if(!nKind)
		{	
//			::MyLog(0,"NAME : %s SymbolNum
			return 0;
		}		
		if(nKind == 107) continue;//19锅 缴国俊 付过 加己 眠啊 巩力. 荐沥.//soto-030520


		if(i >= m_vtSymbolApplyAttrList.size() || nDualGrade > m_vtSymbolApplyAttrList[i].size()|| nItemNumber > MAX_SYMBOL_ITEM)
		{
			::MyLog(0,"缴国 AddSymbolEffect()!!!!ERROR!!!!   NAME : %s --> AttrNum: %d, nDualGrade: %d, ItemNumber: %d",i,nDualGrade,nItemNumber);
			return 0;
		}

		int nValue = m_vtSymbolApplyAttrList[i][nDualGrade-1].anAttrValue[nItemNumber-1];
		
		if(!nValue)continue;
		RareEM.ApplyStaticRareEffect(pChar->StaticRare,nKind,nValue,true);
	}

	return 1;	
}



bool CSymbolItemMgr::DoHaveSymbol(CHARLIST *pChar)
{
	return (pChar->quick[5].item_no > 0);
}



int CSymbolItemMgr::GetSymbolGrade(CHARLIST *pChar)
{
	return (int)pChar->quick[5].attr[0];
}

void CSymbolItemMgr::MakeSymbolItem(CHARLIST*	pChar,int nGrade)
{
	int nItemNumber = this->GetItemNumber(pChar->Class,pChar->GetDualClass());
	
	if(nItemNumber)
	{
		//辑滚俊辑狼 父甸扁.
		pChar->quick[5].item_no = nItemNumber;
		pChar->quick[5].attr[0] = nGrade;
		
		//努扼捞攫飘肺 父甸菌促绰 皋技瘤甫 焊辰促.
		t_packet	packet;memset(&packet,0,sizeof(t_packet));
		packet.h.header.type = CMD_SYMBOL_MAKE;
		packet.h.header.size = sizeof(t_SYMBOL_ITEM_MSG);
		packet.u.Symbol_Item.m_nGrade = nGrade;
		packet.u.Symbol_Item.m_nItemNumber = nItemNumber;

		QueuePacket(connections,pChar->GetServerID(),&packet,1);
		Send_RareItemMakeLog(pChar->GetServerID(),nItemNumber,-1,nGrade,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
	}
}

//荐悼 诀弊饭捞靛
void CSymbolItemMgr::UpGradeSymbol(CHARLIST *pChar, int nGrade)
{
	int nItemNumber = pChar->quick[5].item_no;
	
	if(nItemNumber)
	{
		//辑滚俊辑狼 诀弊饭捞靛..
		pChar->quick[5].item_no = nItemNumber;
		pChar->quick[5].attr[0] = nGrade;
		
		//努扼捞攫飘肺 诀弊饭捞靛沁促绰 皋技瘤甫 焊辰促.
		t_packet	packet;memset(&packet,0,sizeof(t_packet));
		packet.h.header.type = CMD_SYMBOL_UPGRADE;
		packet.h.header.size = sizeof(t_SYMBOL_ITEM_MSG);
		packet.u.Symbol_Item.m_nGrade = nGrade;
		packet.u.Symbol_Item.m_nItemNumber = nItemNumber;

		QueuePacket(connections,pChar->GetServerID(),&packet,1);
		Send_RareItemMakeLog(pChar->GetServerID(),nItemNumber,-2,nGrade,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
	}
}


//磊悼 诀弊饭捞靛.
void CSymbolItemMgr::UpGradeSymbol(CHARLIST *pChar)
{
	int nGrade		= pChar->quick[5].attr[0]+1;
	UpGradeSymbol(pChar,nGrade);
}

//捞镑俊辑绰..Rare加己俊 绝绰 加己.阑 利侩矫懦锭 静牢促.窜窍唱父.
//牢磊 汲疙 ( pChar : 秦寸 某腐磐, i : 缴杭俊 崔赴 加己 割锅掳 加己 牢啊. i+1锅掳 加己.
int CSymbolItemMgr::GetMagicAttr(CHARLIST *pChar)
{
	int nItemNumber = pChar->quick[5].item_no;
	int	nDualGrade	= pChar->quick[5].attr[0];	//酒捞袍狼 殿鞭捞促.
	int	n1StClass	= pChar->Class;
	int	n2StClass	= pChar->GetDualClass();

	if(!nItemNumber || !nDualGrade)return 0;
	
	int nValue = 0;

	for(int i = 0;i < MAX_APPLY_ATTR;i++)
	{
		int nKind = GetRareNum(n1StClass,n2StClass,i);
		
		switch(nKind)
		{
		case 107: 
			{
				nValue = m_vtSymbolApplyAttrList[i][nDualGrade-1].anAttrValue[nItemNumber-1];
				return nValue;
			}
		}
	}

	return 0;
}

⌨️ 快捷键说明

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