商城购买修正

This commit is contained in:
小疯
2022-09-21 16:28:11 +08:00
parent 34af6a1936
commit 627bf43ee3
9 changed files with 220 additions and 211 deletions

View File

@@ -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] = {};