Фикс для вот
этой вариации дюпа
Код:
void WINAPIV CUnmannedTraderUserInfoTable::CompleteBuy(
CUnmannedTraderUserInfoTable * pObj,
char byRet,
char * pLoadData,
CUnmannedTraderTradeInfo * pkTaradInfo)
{
UNREFERENCED_PARAMETER(byRet);
do
{
CPlayer* ppkBuyPlayer = nullptr;
CUnmannedTraderUserInfo* ppkBuyUser = nullptr;
_qry_case_unmandtrader_buy_update_wait *pkQuery = (_qry_case_unmandtrader_buy_update_wait*)pLoadData;
if (!pObj->SubCompleteBuyFindBuyer(pkQuery, &ppkBuyUser, &ppkBuyPlayer))
break;
if (!ppkBuyUser)
break;
if (!ppkBuyPlayer)
break;
ppkBuyUser->ClearRequest();
_unmannedtrader_buy_item_result_zocl Dst;
_qry_case_unmandtrader_buy_update_complete pQryData;
memset(&Dst, 0, sizeof(Dst));
memset(&pQryData, 0, sizeof(pQryData));
Dst.byRetCode = 0;
Dst.byNum = pkQuery->byNum;
pQryData.wInx = ppkBuyPlayer->m_ObjID.m_wIndex;
pQryData.dwBuyer = pkQuery->dwBuyer;
pQryData.byRace = ppkBuyPlayer->m_Param.GetRaceCode();
pQryData.byType = pkQuery->byType;
int nSucceeded = 0, nFailed = 0;
for (int j = 0; j < pkQuery->byNum; ++j)
{
int indx = pQryData.byNum;
if (pObj->SubCompleteBuyProcBuy(
ppkBuyPlayer,
ppkBuyUser,
pkQuery->tResultTime,
&pkQuery->List[j],
&Dst.List[j],
&pQryData.List[indx],
&pQryData.byNum,
&Dst.dwPayDalant,
pkTaradInfo))
{
++nSucceeded;
}
else if (pQryData.List[indx].byUpdateState == 8)
{
++nFailed;
}
}
if (nFailed > 0 || nSucceeded > 0)
pObj->SubCompleteBuyIncreaseVesion(pkQuery->byDivision, pkQuery->byClass);
if (pQryData.byNum > 0)
g_MainThread->PushDQSData(0xFFFFFFFF, 0i64, 68, (char *)&pQryData, sizeof(pQryData));
if (nSucceeded < Dst.byNum)
Dst.byRetCode = -1;
Dst.dwLeftDalant = ppkBuyPlayer->m_Param.GetDalant();
char pbyType[] = { 30, 31 };
g_NetProcess[(uint8_t)e_type_line::client]->LoadSendMsg(ppkBuyPlayer->m_ObjID.m_wIndex, pbyType, (char *)&Dst, Dst.size());
} while (false);
}