2022-9-2 23:34:04

This commit is contained in:
小疯
2022-09-02 23:34:06 +08:00
parent b3ddde5254
commit 981b40bd96
7 changed files with 2134 additions and 124 deletions

View File

@@ -71,23 +71,23 @@ int Controller::hook_IPacketDispatcher_ParamBase_dispatch_template(int a1, int a
Controller::Get()->old_IPacketDispatcher_ParamBase_dispatch_template(a1, a2, a3);
}
int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pUser, PacketBuf* pBuf)
int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* user, PacketBuf* pBuf)
{
printf("getCurCharacName :%s \n", pUser->getCurCharacName().c_str());
printf("getCurCharacNo :%d \n", pUser->getCurCharacNo());
printf("getCurCharacName :%s \n", user->getCurCharacName().c_str());
printf("getCurCharacNo :%d \n", user->getCurCharacNo());
printf("get_buf_ptr :%p %p \n", pBuf->get_buf_ptr(0));
printf("get_len :%d \n", pBuf->get_len());
// printf("pBuf :%s \n", Util::ToHexString((const unsigned char*)pBuf->get_buf_ptr(0),40).c_str());
int state = pUser->get_state();
int state = user->get_state();
LOG("state :%d \n", state);
//校验角色状态是否允许镶嵌
if (state != 3)
return 0;
int isEnableAvatarSocketAction = pUser->isEnableAvatarSocketAction();
int isEnableAvatarSocketAction = user->isEnableAvatarSocketAction();
if (isEnableAvatarSocketAction)
pUser->SendCmdErrorPacket(205, (unsigned char)isEnableAvatarSocketAction);
user->SendCmdErrorPacket(205, (unsigned char)isEnableAvatarSocketAction);
//解析packet_buf
//时装所在的背包槽
@@ -100,14 +100,14 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
int emblem_cnt = pBuf->get_byte();
LOG("emblem_cnt :%d \n", emblem_cnt);
if (pUser->CheckItemLock(2, avartar_inven_slot))
if (user->CheckItemLock(2, avartar_inven_slot))
{
pUser->SendCmdErrorPacket(205, 213);
user->SendCmdErrorPacket(205, 213);
return 0;
}
//获取时装道具
CInventory* inven = pUser->getCurCharacInvenW();
CInventory* inven = user->getCurCharacInvenW();
if (!inven)
{
LOG("pUser->getCurCharacInvenW : error \n");
@@ -120,7 +120,7 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
return 0;
}
//校验时装 数据是否合法
if (avartar->isEmpty() || (avartar->getKey() != avartar_item_id) || pUser->CheckItemLock(2, avartar_inven_slot))
if (avartar->isEmpty() || (avartar->getKey() != avartar_item_id) || user->CheckItemLock(2, avartar_inven_slot))
{
LOG("avartar->isEmpty() || avartar->getKey() || pUser->CheckItemLock() : error \n");
@@ -155,7 +155,7 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
if (emblem->isEmpty() || (emblem->getKey() != emblem_item_id) || (avartar_socket_slot >= 3))
{
LOG("emblem->isEmpty() || (emblem->getKey() : error \n");
pUser->SendCmdErrorPacket(205, 209);
user->SendCmdErrorPacket(205, 209);
return 0;
}
@@ -166,14 +166,14 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
if (!DataManager)
{
LOG("CDataManager::G_CDataManager() : error \n");
pUser->SendCmdErrorPacket(205, 209);
user->SendCmdErrorPacket(205, 209);
return 0;
}
CItem* citem = DataManager->find_item(emblem_item_id);
if (!citem)
{
LOG("DataManager->find_item() : error \n");
pUser->SendCmdErrorPacket(205, 209);
user->SendCmdErrorPacket(205, 209);
return 0;
}
@@ -181,7 +181,7 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
if (!citem->is_stackable() || (citem->GetItemType() != 20))
{
LOG("citem->is_stackable() || (citem->GetItemType() : error \n");
pUser->SendCmdErrorPacket(205, 209);
user->SendCmdErrorPacket(205, 209);
return 0;
}
@@ -194,7 +194,7 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
{
//插槽类型不匹配
LOG("emblem_socket_type & avartar_socket_type\n");
pUser->SendCmdErrorPacket(205, 209);
user->SendCmdErrorPacket(205, 209);
return 0;
}
LOG("avartar_socket_slot:%d emblem_inven_slot:%d emblem_item_id:%d\n", avartar_socket_slot, emblem_inven_slot, emblem_item_id);
@@ -206,7 +206,7 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
{
//删除徽章
int emblem_inven_slot = avartar_socket_slot.second.first;
inven->delete_item(1, emblem_inven_slot, 1, 8, 1);
inven->delete_item(CInventory::INVENTORY_TYPE_ITEM, emblem_inven_slot, 1, 8, 1);
//设置时装插槽数据
int emblem_item_id = avartar_socket_slot.second.second;
@@ -215,10 +215,10 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
}
//时装插槽数据存档
DB_UpdateAvatarJewelSlot::makeRequest(pUser->getCurCharacNo(), avartar->get_ui_id(), (void*)jewel_socket_data);
DB_UpdateAvatarJewelSlot::makeRequest(user->getCurCharacNo(), avartar->get_ui_id(), (void*)jewel_socket_data);
//通知客户端时装数据已更新
pUser->SendUpdateItemList(1, 1, avartar_inven_slot);
user->SendUpdateItemList(1, 1, avartar_inven_slot);
LOG("徽章镶嵌完毕!!!");
//回包给客户端
InterfacePacketBuf* packet_guard = (InterfacePacketBuf*)PacketGuard::NewPacketGuard();
@@ -226,7 +226,7 @@ int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* pU
packet_guard->put_header(1, 204);
packet_guard->put_int(1);
packet_guard->finalize(1);
pUser->Send((PacketGuard*)packet_guard);
user->Send((PacketGuard*)packet_guard);
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
}
@@ -258,6 +258,7 @@ int Controller::hook_PacketDispatcher_doDispatch(PacketDispatcher* a1, CUser* us
if (packet_id == Packet_UseEquipmentMoveItem)
{
int result = 0;
PacketBuf* v25 = PacketBuf::NewPacketBuf();
user->setLastPacketID(packet_id);
v25->bind_packet(packet_src, packet_len);
@@ -271,11 +272,14 @@ int Controller::hook_PacketDispatcher_doDispatch(PacketDispatcher* a1, CUser* us
, Util::ToHexString((const unsigned char*)packet_src, packet_len).c_str()
);
int result = CDispatch::Get()->UseEquipmentMoveItem(user, v25);
if (v25)
{
ENUM_PACK_RET_TYPE ret = CDispatch::Get()->UseEquipmentMoveItem(user, v25);
result = (ret == PAK_ERROR) ? 1 : 0;
PacketBuf::DelPacketBuf(v25);
PacketBuf::DelPacketBuf(v25);
}
return result;
}
return Controller::Get()->old_PacketDispatcher_doDispatch(a1, user, packet_class, packet_id, packet_src, packet_len, a7, a8);