添加进入人物和退出人物hook
This commit is contained in:
@@ -8,7 +8,8 @@
|
||||
|
||||
#include "dispatch.h"
|
||||
|
||||
CDispatch::CDispatch()
|
||||
CDispatch::CDispatch() :
|
||||
last_move_map_tickcount(0)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -124,6 +125,11 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
|
||||
//Data: equipment_citem->GetItemType=147418664 item_citem->is_stackable=1 item_citem->GetItemType=11
|
||||
int equipment_Type = ((CEquipItem*)equipment_citem)->GetItemType();
|
||||
int rarity = equipment_citem->get_rarity();
|
||||
if (rarity != 4)
|
||||
{
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
|
||||
LOG(u8"Data: equipment_citem->GetItemType=%d item_citem->is_stackable=%d item_citem->GetItemType=%d"
|
||||
, equipment_Type
|
||||
@@ -190,7 +196,7 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
|
||||
//inven->delete_item(1, emblem_inven_slot, 1, 8, 1);
|
||||
auto invenW = user->getCurCharacInvenW();
|
||||
InterfacePacketBuf* packet_guard = (InterfacePacketBuf*)PacketGuard::NewPacketGuard();
|
||||
|
||||
LOG("%p", invenW);
|
||||
if (invenW->delete_item(CInventory::INVENTORY_TYPE_ITEM, equipment_pos, 1, 37, 1) && invenW->delete_item(CInventory::INVENTORY_TYPE_ITEM, item_pos, 1, 37, 1))
|
||||
{
|
||||
int a9 = AccountCargo->InsertItem(&new_equipment_item, empty_slot);
|
||||
@@ -203,7 +209,8 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
|
||||
packet_guard->finalize(1);
|
||||
user->Send((PacketGuard*)packet_guard);
|
||||
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
|
||||
LOG(u8"user->Send((PacketGuard*)packet_guard)", a9);
|
||||
SendNoti(user, "已完成装备跨界");
|
||||
|
||||
return PAK_OK;
|
||||
}
|
||||
else
|
||||
@@ -213,6 +220,7 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
|
||||
packet_guard->finalize(0);
|
||||
user->Send((PacketGuard*)packet_guard);
|
||||
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
|
||||
SendNoti(user, "装备跨界失败");
|
||||
}
|
||||
return PAK_IGNORE;
|
||||
}
|
||||
@@ -457,7 +465,6 @@ ENUM_PACK_RET_TYPE CDispatch::UseJewel_dispatch_sig(void* pDispatcher_UseJewel,
|
||||
LOG("avartar_socket_slot:%d emblem_inven_slot:%d emblem_item_id:%d\n", avartar_socket_slot, emblem_inven_slot, emblem_item_id);
|
||||
emblems[avartar_socket_slot] = std::make_pair(emblem_inven_slot, emblem_item_id);
|
||||
}
|
||||
LOG("数据已读取!!!\n");
|
||||
|
||||
for (auto& avartar_socket_slot : emblems)
|
||||
{
|
||||
@@ -468,7 +475,6 @@ ENUM_PACK_RET_TYPE CDispatch::UseJewel_dispatch_sig(void* pDispatcher_UseJewel,
|
||||
//设置时装插槽数据
|
||||
int emblem_item_id = avartar_socket_slot.second.second;
|
||||
*(int*)(jewel_socket_data + avartar_socket_slot.first * 6 + 2) = emblem_item_id;
|
||||
LOG("徽章item_id=%d 已成功镶嵌进avartar_socket_slot=%d 的槽内!\n", emblem_item_id, avartar_socket_slot);
|
||||
}
|
||||
|
||||
//时装插槽数据存档
|
||||
@@ -476,7 +482,6 @@ ENUM_PACK_RET_TYPE CDispatch::UseJewel_dispatch_sig(void* pDispatcher_UseJewel,
|
||||
|
||||
//通知客户端时装数据已更新
|
||||
user->SendUpdateItemList(1, 1, avartar_inven_slot);
|
||||
LOG("徽章镶嵌完毕!!!");
|
||||
//回包给客户端
|
||||
InterfacePacketBuf* packet_guard = (InterfacePacketBuf*)PacketGuard::NewPacketGuard();
|
||||
|
||||
@@ -485,8 +490,74 @@ ENUM_PACK_RET_TYPE CDispatch::UseJewel_dispatch_sig(void* pDispatcher_UseJewel,
|
||||
packet_guard->finalize(1);
|
||||
user->Send((PacketGuard*)packet_guard);
|
||||
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
|
||||
SendNoti(user, u8"已完成徽章镶嵌");
|
||||
return PAK_OK;
|
||||
}
|
||||
return PAK_IGNORE;
|
||||
}
|
||||
|
||||
ENUM_PACK_RET_TYPE CDispatch::MoveMap_dispatch_sig(void* a1, CUser* user, PacketBuf* pBuf)
|
||||
{
|
||||
USER_DATA data;
|
||||
if (user_map.Find(user, &data))
|
||||
{
|
||||
auto CurTickCount = CSystemTime::G_CSystemTime()->getCurTickCount();
|
||||
|
||||
if (CurTickCount >= last_move_map_tickcount)
|
||||
{
|
||||
if ((CurTickCount - last_move_map_tickcount) <= 1000)
|
||||
{
|
||||
data.abnormal_data_count++;
|
||||
}
|
||||
last_move_map_tickcount = CurTickCount;
|
||||
}
|
||||
|
||||
user_map.Change(user, data);
|
||||
|
||||
//判断异常次数是否大于等于3
|
||||
if (data.abnormal_data_count >= 3)
|
||||
{
|
||||
return PAK_ERROR;
|
||||
}
|
||||
}
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
ENUM_PACK_RET_TYPE CDispatch::Inter_LoadEtc_dispatch_sig(void* a1, CUser* user, char* a3)
|
||||
{
|
||||
user->getCurCharacNo();
|
||||
user->getCurCharacName();
|
||||
|
||||
user_map.Push(user, {});
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
ENUM_PACK_RET_TYPE CDispatch::DisPatcher_ReturnToSelectCharacter_dispatch_sig(void* a1, CUser* user, char* a3)
|
||||
{
|
||||
|
||||
user_map.Erase(user);
|
||||
return PAK_OK;
|
||||
}
|
||||
|
||||
void CDispatch::SendMsg(CUser* user, int pack_id, int status, const std::string& str)
|
||||
{
|
||||
char out_str[0xff] = {};
|
||||
memset(out_str, 0, sizeof(out_str));
|
||||
DNFFLib::ConvertGBKtoUTF8((char*)str.c_str(), out_str);
|
||||
InterfacePacketBuf* packet_guard = (InterfacePacketBuf*)PacketGuard::NewPacketGuard();
|
||||
packet_guard->put_header(1, pack_id);
|
||||
packet_guard->put_int(status);
|
||||
packet_guard->put_int(strlen(out_str));
|
||||
packet_guard->put_str(out_str, strlen(out_str));
|
||||
user->Send((PacketGuard*)packet_guard);
|
||||
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
|
||||
}
|
||||
|
||||
void CDispatch::SendNoti(CUser* user, const std::string& str, NOTI_PACKETMESSAGE_TYPE type)
|
||||
{
|
||||
char out_str[0xff] = {};
|
||||
memset(out_str, 0, sizeof(out_str));
|
||||
DNFFLib::ConvertGBKtoUTF8((char*)str.c_str(), out_str);
|
||||
user->SendNotiPacketMessage(out_str, type);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user