📄 rareeffectmgr.cpp
字号:
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 + -