Почему в питере было тепло? Патамушта мой пукан горел от
этой темы, точнее от того косяка который сделали.
Собственно с клиента данные приходят валидные, далее в функции:
Код:
CUnmannedTraderUserInfo::ReRegist
Заполняется "таска", которая будет выполнена в отдельном треде
Структура этой задачи такая:
Код:
struct _qry_case_unmandtrader_re_registsingleitem
{
struct __list
{
char byProcRet;
bool bRegist;
unsigned __int16 wItemSerial;
unsigned int dwTax;
unsigned int dwListIndex;
char byClass1;
char byClass2;
char byClass3;
unsigned int dwPrice;
unsigned int dwRegistSerial;
char byUpdateState;
};
char byType;
unsigned __int16 wInx;
char byNum;
unsigned int dwOwnerSerial;
__list List[10];
};
Как мы видим, в этой структуре нет ни одного поля, которое бы отвечало за кол-во предметов которое будет зарегистрировано. Смекаешь? Они не апдейтят кол-во предметов в стеке, они просто обновляют цену, время регистрации и стейт у зарегистрированного предмета.
Как это фиксить? Мне видится только 1 нормальный способ, это добавить инфу, о кол-ве предметов в стеке, в структуру задачи что выше, но для этого нужно восстановить не малое кол-во функций чтобы это поменять.
Но! У меня есть костыльные варианты решения:
Способ номер раз:
Вешаемся на функцию
Код:
CUnmannedTraderController::UpdateReRegist
И перед выполнением функции
Код:
CRFWorldDatabase::Update_UnmannedTraderReRegist
Дёргаем ячейку по серийнику с инвентаря и уже из ячейки берём сколько есть, но тут есть 1 грабля, на которую можно наступить - перс может быть уже не в онлайне в этот момент и тогда надо делать запрос в базу чтобы достать нужное кол-во. А после квеста с получением кол-ва предметов в стеке - делаем запрос в базу, чтобы это обновить
Способ номер два:
Вешаемся на функцию
Код:
CUnmannedTraderUserInfo::ReRegist
и делаем отмену регистрации, как это сделано вот в этой функции
Код:
CUnmannedTraderUserInfo::CancelRegist
Способ номер 3:
Вешаемся на функцию
Код:
CUnmannedTraderUserInfo::ReRegist
и не делаем нихуя, вообще, вот прям совсем
ибо, нету ручек - нет конфеток
