商城购买修正
This commit is contained in:
243
src/dispatch.cpp
243
src/dispatch.cpp
@@ -470,7 +470,7 @@ ENUM_PACK_RET_TYPE CDispatch::UseJewel_dispatch_sig(void* pDispatcher_UseJewel,
|
||||
|
||||
sizeof(stAvatarEmblemInfo_t);
|
||||
|
||||
|
||||
|
||||
|
||||
int avartar_socket_type = JewelSocketData->EmblemSocketData[avartar_socket_slot].slot_type;
|
||||
LOG("emblem_socket_type :%d avartar_socket_type :%d", emblem_socket_type, avartar_socket_type);
|
||||
@@ -561,133 +561,86 @@ ENUM_PACK_RET_TYPE CDispatch::ProcessIPG_ResultOutput(CUser* user, int Goods_No,
|
||||
|
||||
if (Cera_Type == 0) //0是点券 1是代币
|
||||
{
|
||||
if (Goods_No >= CGameDataManager::Get()->get_cera_award_begin_id() && Goods_No <= CGameDataManager::Get()->get_cera_award_end_id())
|
||||
CeraShopBonusCodeType cera_shop_bonus_code_;
|
||||
if (CGameDataManager::Get()->is_cera_shop_bonus_code(Goods_No, &cera_shop_bonus_code_))
|
||||
{
|
||||
int cur_purchase_count = 1;
|
||||
AWARD_ITEM BonusItem;
|
||||
|
||||
LOG("Size:%d", CGameDataManager::Get()->get_cera_award_item_map()->Size());
|
||||
if (CGameDataManager::Get()->get_cera_award_item_map()->Find(cur_purchase_count, &BonusItem))
|
||||
CeraShopBonusItemType BonusItem;
|
||||
int cur_purchase_count = cera_shop_bonus_code_.code_count;
|
||||
if (cur_purchase_count > 0)
|
||||
{
|
||||
if (user->getCurCharacR())
|
||||
if (!CGameDataManager::Get()->get_cera_shop_bonus_item_map()->Find(cur_purchase_count, &BonusItem))
|
||||
{
|
||||
if (BonusItem.item_id == 1)
|
||||
{
|
||||
WongWork::CCeraShop::G_CCeraShop()->_processCoin(user, BonusItem.item_num, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto item = CDataManager::G_CDataManager()->find_item(BonusItem.item_id);
|
||||
if (item)
|
||||
{
|
||||
//if (item->is_stackable()
|
||||
// && ((*(int(**)(CItem*))(*(_DWORD*)item + 12))(item) == 16 // GetItemType
|
||||
// || (*(int(**)(CItem*))(*(_DWORD*)item + 12))(item) == 34)) // GetItemType
|
||||
{
|
||||
int inserted = -1;
|
||||
Inven_Item v60 = {};
|
||||
*(_DWORD*)((char*)&v60 + 2) = BonusItem.item_id;
|
||||
*(_DWORD*)((char*)&v60 + 7) = BonusItem.item_num;
|
||||
|
||||
(*(void(**)(CItem*, Inven_Item*))(*(_DWORD*)item + 8))(item, &v60);
|
||||
|
||||
auto CurCharacInvenW = user->getCurCharacInvenW();
|
||||
|
||||
inserted = CurCharacInvenW->insertItemIntoInventory(v60, 15, 1, 0);
|
||||
if (inserted == -1)
|
||||
{
|
||||
auto CurCharacNo = user->getCurCharacNo();
|
||||
|
||||
((WongWork::CMailBoxHelper*)(user))->ReqDBSendNewMailCashShop(&v60, 0, CurCharacNo, 1, 0, 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
user->SendUpdateItemList(1, 0, inserted);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
goto IPG_END;
|
||||
}
|
||||
|
||||
pbuf->put_int(BonusItem.item_id);
|
||||
pbuf->put_int(BonusItem.item_num);
|
||||
|
||||
std::vector <unsigned char> code;
|
||||
for (int i = 0; i < 0x30; i++)
|
||||
{
|
||||
code.push_back(0x90);
|
||||
}
|
||||
//0817964F 0817967F
|
||||
CMem::WriteBytes((void*)0x0817964F, code.data(), code.size());
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (Goods_No >= CGameDataManager::Get()->get_cera_award_package_begin_id() && Goods_No <= CGameDataManager::Get()->get_cera_award_package_end_id())
|
||||
{
|
||||
int cur_purchase_count = 1;
|
||||
AWARD_ITEM BonusItem;
|
||||
LOG("Size:%d", CGameDataManager::Get()->get_cera_award_package_item_map()->Size());
|
||||
if (CGameDataManager::Get()->get_cera_award_package_item_map()->Find(cur_purchase_count, &BonusItem))
|
||||
else
|
||||
{
|
||||
if (user->getCurCharacR())
|
||||
if (!CGameDataManager::Get()->get_rand_cera_shop_bonus_item(&BonusItem))
|
||||
{
|
||||
if (BonusItem.item_id == 1)
|
||||
{
|
||||
WongWork::CCeraShop::G_CCeraShop()->_processCoin(user, BonusItem.item_num, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto item = CDataManager::G_CDataManager()->find_item(BonusItem.item_id);
|
||||
if (item)
|
||||
{
|
||||
//if (item->is_stackable()
|
||||
// && ((*(int(**)(CItem*))(*(_DWORD*)item + 12))(item) == 16 // GetItemType
|
||||
// || (*(int(**)(CItem*))(*(_DWORD*)item + 12))(item) == 34)) // GetItemType
|
||||
{
|
||||
int inserted = -1;
|
||||
Inven_Item v60 = {};
|
||||
*(_DWORD*)((char*)&v60 + 2) = BonusItem.item_id;
|
||||
*(_DWORD*)((char*)&v60 + 7) = BonusItem.item_num;
|
||||
|
||||
(*(void(**)(CItem*, Inven_Item*))(*(_DWORD*)item + 8))(item, &v60);
|
||||
|
||||
auto CurCharacInvenW = user->getCurCharacInvenW();
|
||||
|
||||
inserted = CurCharacInvenW->insertItemIntoInventory(v60, 15, 1, 0);
|
||||
if (inserted == -1)
|
||||
{
|
||||
auto CurCharacNo = user->getCurCharacNo();
|
||||
|
||||
((WongWork::CMailBoxHelper*)(user))->ReqDBSendNewMailCashShop(&v60, 0, CurCharacNo, 1, 0, 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
user->SendUpdateItemList(1, 0, inserted);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
goto IPG_END;
|
||||
}
|
||||
|
||||
pbuf->put_int(BonusItem.item_id);
|
||||
pbuf->put_int(BonusItem.item_num);
|
||||
|
||||
std::vector <unsigned char> code;
|
||||
for (int i = 0; i < 0x30; i++)
|
||||
{
|
||||
code.push_back(0x90);
|
||||
}
|
||||
//0817964F 0817967F
|
||||
CMem::WriteBytes((void*)0x0817964F, code.data(), code.size());
|
||||
return;
|
||||
}
|
||||
|
||||
if (user->getCurCharacR())
|
||||
{
|
||||
if (BonusItem.item_num == 0)
|
||||
{
|
||||
goto IPG_END;
|
||||
}
|
||||
else if (BonusItem.item_id == 1)
|
||||
{
|
||||
WongWork::CCeraShop::G_CCeraShop()->_processCoin(user, BonusItem.item_num, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto item = CDataManager::G_CDataManager()->find_item(BonusItem.item_id);
|
||||
if (item)
|
||||
{
|
||||
//if (item->is_stackable()
|
||||
// && ((*(int(**)(CItem*))(*(_DWORD*)item + 12))(item) == 16 // GetItemType
|
||||
// || (*(int(**)(CItem*))(*(_DWORD*)item + 12))(item) == 34)) // GetItemType
|
||||
{
|
||||
int inserted = -1;
|
||||
Inven_Item v60 = {};
|
||||
*(_DWORD*)((char*)&v60 + 2) = BonusItem.item_id;
|
||||
*(_DWORD*)((char*)&v60 + 7) = BonusItem.item_num;
|
||||
|
||||
(*(void(**)(CItem*, Inven_Item*))(*(_DWORD*)item + 8))(item, &v60);
|
||||
|
||||
auto CurCharacInvenW = user->getCurCharacInvenW();
|
||||
|
||||
inserted = CurCharacInvenW->insertItemIntoInventory(v60, 15, 1, 0);
|
||||
if (inserted == -1)
|
||||
{
|
||||
auto CurCharacNo = user->getCurCharacNo();
|
||||
|
||||
((WongWork::CMailBoxHelper*)(user))->ReqDBSendNewMailCashShop(&v60, 0, CurCharacNo, 1, 0, 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
user->SendUpdateItemList(1, 0, inserted);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pbuf->put_int(BonusItem.item_id);
|
||||
pbuf->put_int(BonusItem.item_num);
|
||||
|
||||
std::vector <unsigned char> code;
|
||||
for (int i = 0; i < 0x30; i++)
|
||||
{
|
||||
code.push_back(0x90);
|
||||
}
|
||||
//0817964F 0817967F
|
||||
CMem::WriteBytes((void*)0x0817964F, code.data(), code.size());
|
||||
return PAK_OK;
|
||||
}
|
||||
}
|
||||
|
||||
IPG_END:
|
||||
std::vector <unsigned char> code = {
|
||||
0x8B, 0x85, 0x04, 0xFF, 0xFF, 0xFF, 0x89, 0x44, 0x24, 0x04, 0x8D, 0x85, 0x14, 0xFF, 0xFF, 0xFF,
|
||||
0x89, 0x04, 0x24, 0xE8, 0xD5, 0x22, 0xF5, 0xFF, 0x8B, 0x85, 0x00, 0xFF, 0xFF, 0xFF, 0x89, 0x44,
|
||||
@@ -697,6 +650,62 @@ ENUM_PACK_RET_TYPE CDispatch::ProcessIPG_ResultOutput(CUser* user, int Goods_No,
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
ENUM_PACK_RET_TYPE CDispatch::Init_done(int argc, const char** argv)
|
||||
{
|
||||
|
||||
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
ENUM_PACK_RET_TYPE CDispatch::importCashShopItemList(const std::string* str)
|
||||
{
|
||||
/**
|
||||
|
||||
[cash_shop_bonus_code]
|
||||
3
|
||||
10000 10053 0 0 随机获取一个发送
|
||||
10054 10110 1 1 发第一个
|
||||
100178 100180 3 3 发第三个
|
||||
|
||||
[cash_shop_bonus_item]
|
||||
3
|
||||
1 3037 10
|
||||
2 3037 100
|
||||
3 3037 1000
|
||||
|
||||
*/
|
||||
if (*str == "[cash_shop_bonus_code]")
|
||||
{
|
||||
int _total = ScanInt();
|
||||
|
||||
for (int i = 0; i < _total; i++)
|
||||
{
|
||||
CeraShopBonusCodeType cera_shop_bonus_ = {};
|
||||
cera_shop_bonus_.code_min = ScanInt();
|
||||
cera_shop_bonus_.code_max = ScanInt();
|
||||
cera_shop_bonus_.code_count = ScanInt();
|
||||
CGameDataManager::Get()->get_cera_shop_bonus_code_array()->push_back(cera_shop_bonus_);
|
||||
}
|
||||
}
|
||||
else if (*str == "[cash_shop_bonus_item]")
|
||||
{
|
||||
int _total = ScanInt();
|
||||
for (int i = 0; i < _total; i++)
|
||||
{
|
||||
int index_ = ScanInt();
|
||||
int item_id = ScanInt();
|
||||
int item_num = ScanInt();
|
||||
int is_random = ScanInt();
|
||||
if (is_random == 1)
|
||||
{
|
||||
CGameDataManager::Get()->get_cera_shop_bonus_item_map_rand()->Push(index_, { item_id, item_num, true });
|
||||
}
|
||||
CGameDataManager::Get()->add_cera_shop_bonus_item(index_, item_id, item_num, is_random);
|
||||
}
|
||||
}
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
void CDispatch::SendMsg(CUser* user, int pack_id, int status, const std::string& str)
|
||||
{
|
||||
char out_str[0xff] = {};
|
||||
|
||||
Reference in New Issue
Block a user