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