Показать сообщение отдельно
Старый 26.06.2017, 22:40   #1
g00dw1n
Эксперт
Аватар для g00dw1n
OFFLINE
Регистрация: 30.01.2016
Возраст: 32
Сообщений: 2,265
Благодарностей:
355 всего
Мнения: + 1105
Репутация: 1066
Отправить сообщение для g00dw1n с помощью Skype™

[GU] Фикс аукцион


Фикс для вот этой вариации дюпа

Код:
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);
        }

Злобный программист
 
Ответить с цитированием
Сказали спасибо:
AsteriaGame (30.06.2017)