修复徽章镶嵌

This commit is contained in:
小疯 2022-09-12 13:35:16 +08:00
parent f77da28439
commit 2ccdac8561
16 changed files with 1484 additions and 1190 deletions

View File

@ -39,8 +39,8 @@ void Controller::init()
08179043 0x1 97 B8
0817904E 0x1 8C AD
*/
Mem::WriteUChar((void*)(0x08179043), 0xB8); //异界被击
Mem::WriteUChar((void*)(0x0817904E), 0xAD); //异界被击
Mem::WriteUChar((void*)(0x08179043), 0xB8);
Mem::WriteUChar((void*)(0x0817904E), 0xAD);
@ -50,7 +50,7 @@ void Controller::init()
mhook_UseJewel_dispatch_sig.Hook((void**)&old_UseJewel_dispatch_sig, (void*)hook_UseJewel_dispatch_sig);
mhook_UseJewel_dispatch_sig.Hook((void**)&old_Dispatcher_ModItemAttr_dispatch_sig, (void*)hook_Dispatcher_ModItemAttr_dispatch_sig);
mhook_Dispatcher_ModItemAttr_dispatch_sig.Hook((void**)&old_Dispatcher_ModItemAttr_dispatch_sig, (void*)hook_Dispatcher_ModItemAttr_dispatch_sig);
mhook_PacketDispatcher_doDispatch.Hook((void**)&old_PacketDispatcher_doDispatch, (void*)hook_PacketDispatcher_doDispatch);
@ -88,186 +88,33 @@ int Controller::hook_IPacketDispatcher_ParamBase_dispatch_template(int a1, int a
int Controller::hook_UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* user, PacketBuf* pBuf)
{
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 = user->get_state();
LOG("state :%d \n", state);
//校验角色状态是否允许镶嵌
if (state != 3)
return 0;
int isEnableAvatarSocketAction = user->isEnableAvatarSocketAction();
if (isEnableAvatarSocketAction)
user->SendCmdErrorPacket(205, (unsigned char)isEnableAvatarSocketAction);
//解析packet_buf
//时装所在的背包槽
int avartar_inven_slot = pBuf->get_short();
LOG("avartar_inven_slot :%d \n", avartar_inven_slot);
//时装item_id
int avartar_item_id = pBuf->get_int();
LOG("avartar_item_id :%d \n", avartar_item_id);
//本次镶嵌徽章数量
int emblem_cnt = pBuf->get_byte();
LOG("emblem_cnt :%d \n", emblem_cnt);
if (user->CheckItemLock(2, avartar_inven_slot))
{
user->SendCmdErrorPacket(205, 213);
return 0;
}
//获取时装道具
CInventory* inven = user->getCurCharacInvenW();
if (!inven)
{
LOG("pUser->getCurCharacInvenW : error \n");
return 0;
}
Inven_Item* avartar = inven->GetInvenRef(CInventory::INVENTORY_TYPE_AVARTAR, avartar_inven_slot);
if (!avartar)
{
LOG("inven->GetInvenRef : error \n");
return 0;
}
//校验时装 数据是否合法
if (avartar->isEmpty() || (avartar->getKey() != avartar_item_id) || user->CheckItemLock(2, avartar_inven_slot))
{
LOG("avartar->isEmpty() || avartar->getKey() || pUser->CheckItemLock() : error \n");
return 0;
}
//获取时装插槽数据
WongWork::CAvatarItemMgr* avartar_add_info = avartar->get_add_info();
WongWork::CAvatarItemMgr* inven_avartar_mgr = inven->GetAvatarItemMgrR();
int jewel_socket_data = inven_avartar_mgr->getJewelSocketData(avartar_add_info);
if (!jewel_socket_data)
{
LOG("jewel_socket_data : error \n");
return 0;
}
LOG("jewel_socket_data :%s \n", Util::ToHexString((const unsigned char*)jewel_socket_data, 40).c_str());
if (emblem_cnt <= 3)
{
std::map<int, std::pair<int, int>> emblems;
for (int i = 0; i < emblem_cnt; i++)
{
//徽章所在的背包槽
int emblem_inven_slot = pBuf->get_short();
//徽章item_id
int emblem_item_id = pBuf->get_int();
//该徽章镶嵌的时装插槽id
int avartar_socket_slot = pBuf->get_byte();
//获取徽章道具
Inven_Item* emblem = inven->GetInvenRef(CInventory::INVENTORY_TYPE_ITEM, emblem_inven_slot);
//校验徽章及插槽数据是否合法
if (emblem->isEmpty() || (emblem->getKey() != emblem_item_id) || (avartar_socket_slot >= 3))
{
LOG("emblem->isEmpty() || (emblem->getKey() : error \n");
user->SendCmdErrorPacket(205, 209);
return 0;
}
//校验徽章是否满足时装插槽颜色要求
//获取徽章pvf数据
CDataManager* DataManager = CDataManager::G_CDataManager();
if (!DataManager)
{
LOG("CDataManager::G_CDataManager() : error \n");
user->SendCmdErrorPacket(205, 209);
return 0;
}
CStackableItem* citem = (CStackableItem*)DataManager->find_item(emblem_item_id);
if (!citem)
{
LOG("DataManager->find_item() : error \n");
user->SendCmdErrorPacket(205, 209);
return 0;
}
//校验徽章类型
if (!citem->is_stackable() || (citem->GetItemType() != 20))
{
LOG("citem->is_stackable() || (citem->GetItemType() : error \n");
user->SendCmdErrorPacket(205, 209);
return 0;
}
//获取徽章支持的插槽
int emblem_socket_type = citem->getJewelTargetSocket();
//获取要镶嵌的时装插槽类型
int avartar_socket_type = *(short*)(jewel_socket_data + avartar_socket_slot * 6);
if (!(emblem_socket_type & avartar_socket_type))
{
//插槽类型不匹配
LOG("emblem_socket_type & avartar_socket_type\n");
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);
emblems[avartar_socket_slot] = std::make_pair(emblem_inven_slot, emblem_item_id);
}
LOG("数据已读取!!!\n");
for (auto& avartar_socket_slot : emblems)
{
//删除徽章
int emblem_inven_slot = avartar_socket_slot.second.first;
inven->delete_item(CInventory::INVENTORY_TYPE_ITEM, emblem_inven_slot, 1, 8, 1);
//设置时装插槽数据
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);
}
//时装插槽数据存档
DB_UpdateAvatarJewelSlot::makeRequest(user->getCurCharacNo(), avartar->get_ui_id(), (void*)jewel_socket_data);
//通知客户端时装数据已更新
user->SendUpdateItemList(1, 1, avartar_inven_slot);
LOG("徽章镶嵌完毕!!!");
//回包给客户端
InterfacePacketBuf* packet_guard = (InterfacePacketBuf*)PacketGuard::NewPacketGuard();
packet_guard->put_header(1, 204);
packet_guard->put_int(1);
packet_guard->finalize(1);
user->Send((PacketGuard*)packet_guard);
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
}
ENUM_PACK_RET_TYPE ret = CDispatch::Get()->UseJewel_dispatch_sig(pDispatcher_UseJewel, user, pBuf);
int result = (ret == PAK_ERROR) ? 1 : 0;
// 08217C06 ·Ö½â
return 0;
return result;
}
int Controller::hook_Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_ModItemAttr* dis_mod, CUser* user, PacketBuf* pBuf)
{
PacketBuf new_buf;
memcpy(&new_buf, pBuf, sizeof(PacketBuf));
int equipment_pos = new_buf.get_short();
int equipment_id = new_buf.get_int();
int item_pos = new_buf.get_short();
short equipment_pos = 0;
int equipment_id = 0;
short item_pos = 0;
if ((unsigned __int8)new_buf.get_short(&equipment_pos) != 1
|| (unsigned __int8)new_buf.get_int(&equipment_id) != 1
|| (unsigned __int8)new_buf.get_short(&item_pos) != 1)
{
user->SendCmdErrorPacket(84, -1);
return 0;
}
CInventory* CurCharacInvenW = user->getCurCharacInvenR();
auto item_inven = CurCharacInvenW->GetInvenRef(CInventory::INVENTORY_TYPE_ITEM, item_pos);
LOG(u8"UseEquipmentMoveItem [ equipment_pos:%d equipment_id:%d item_pos:%d item_id:%d ]"
, equipment_pos
, equipment_id
, item_pos
, item_inven->getKey()
);
if (!item_inven->isEmpty() && item_inven->getKey() == ITEM_ID_YIJIRUHUN)
{
ENUM_PACK_RET_TYPE ret = CDispatch::Get()->Dispatcher_ModItemAttr_dispatch_sig(dis_mod, user, pBuf);
@ -312,7 +159,7 @@ int Controller::hook_PacketDispatcher_doDispatch(PacketDispatcher* a1, CUser* us
, packet_class
, packet_id
, packet_len
, Util::ToHexString((const unsigned char*)packet_src, packet_len).c_str()
, Utils::ToHexString((const unsigned char*)packet_src, packet_len).c_str()
);
if (v25)

View File

@ -532,6 +532,18 @@ int _Inter_LoadEtc_dispatch_sig(void* pThis, void* pUser, char* a3)
void PrintTag()
{
printf("\n");
LOG("**********************************************************");
LOG(" DNF Server Plugin %s ", MY_VERSION);
LOG(" ");
LOG(" /\\ /\\ ");
LOG(" ");
LOG(" __ ");
LOG(" By:Vance ");
LOG("**********************************************************");
}
void loga()
{
@ -621,22 +633,6 @@ void loga()
}
void PrintTag()
{
printf("\n");
LOG("**********************************************************");
LOG(" DNF Server Plugin %s ", MY_VERSION);
LOG(" ");
LOG(" /\\ /\\ ");
LOG(" ");
LOG(" __ ");
LOG(" By:Vance ");
LOG("**********************************************************");
}
void __attribute__((constructor)) my_init(void)
{
//patchGame();

View File

@ -23,7 +23,6 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
if (user->get_state() != 3)
{
LOG(u8"玩家状态不正常!");
return PAK_IGNORE;
}
@ -34,10 +33,19 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
return PAK_IGNORE;
}
LOG(u8"UseEquipmentMoveItem :%s ", Util::ToHexString((const unsigned char*)pBuf->get_buf_ptr(0), 40).c_str());
int equipment_pos = pBuf->get_short(); //装备位置
int equipment_id = pBuf->get_int(); //装备代码
int item_pos = pBuf->get_short(); //物品位置
LOG(u8"UseEquipmentMoveItem :%s ", Utils::ToHexString((const unsigned char*)pBuf->get_buf_ptr(0), 40).c_str());
short equipment_pos = 0;
int equipment_id = 0;
short item_pos = 0;
if ((unsigned __int8)pBuf->get_short(&equipment_pos) != 1
|| (unsigned __int8)pBuf->get_int(&equipment_id) != 1
|| (unsigned __int8)pBuf->get_short(&item_pos) != 1)
{
user->SendCmdErrorPacket(84, -1);
return PAK_IGNORE;
}
//1 ÎïÆ·À¸ 2 ʱװ
if (user->CheckItemLock(1, equipment_pos))
@ -94,8 +102,8 @@ ENUM_PACK_RET_TYPE CDispatch::UseEquipmentMoveItem(CUser* user, PacketBuf* pBuf)
return PAK_IGNORE;
}
CItem* equipment_citem = DataManager->find_item(equipment_id);
CItem* item_citem = DataManager->find_item(item_id);
CEquipItem* equipment_citem = (CEquipItem*)DataManager->find_item(equipment_id);
CStackableItem* item_citem = (CStackableItem*)DataManager->find_item(item_id);
LOG(u8"equipment_citem +12: %p"
, *(int*)equipment_citem + 12
);
@ -227,9 +235,17 @@ ENUM_PACK_RET_TYPE CDispatch::Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_Mod
user->SendCmdErrorPacket(84, 0xD1u);
return PAK_IGNORE;
}
int equipment_pos = pBuf->get_short();
int equipment_id = pBuf->get_int();
int item_pos = pBuf->get_short();
short equipment_pos = 0;
int equipment_id = 0;
short item_pos = 0;
if ((unsigned __int8)pBuf->get_short(&equipment_pos) != 1
|| (unsigned __int8)pBuf->get_int(&equipment_id) != 1
|| (unsigned __int8)pBuf->get_short(&item_pos) != 1)
{
user->SendCmdErrorPacket(84, -1);
return PAK_IGNORE;
}
auto CurCharacInvenW = (CInventory*)user->getCurCharacInvenW();
Inven_Item equipment_inven = {};
@ -301,9 +317,176 @@ ENUM_PACK_RET_TYPE CDispatch::Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_Mod
CInventory::INVENTORY_TYPE_ITEM,
equipment_pos,
equipment_inven);
dis_mod->_SendResult(user, 1, item_pos, equipment_pos);
return PAK_IGNORE;
}
ENUM_PACK_RET_TYPE CDispatch::UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* user, PacketBuf* pBuf)
{
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 = user->get_state();
LOG("state :%d \n", state);
//校验角色状态是否允许镶嵌
if (state != 3)
return PAK_IGNORE;
int isEnableAvatarSocketAction = user->isEnableAvatarSocketAction();
if (isEnableAvatarSocketAction)
user->SendCmdErrorPacket(205, (unsigned char)isEnableAvatarSocketAction);
//解析packet_buf
short avartar_inven_slot = 0; //时装所在的背包槽
int avartar_item_id = 0; //时装item_id
char emblem_cnt = 0; //本次镶嵌徽章数量
if ((unsigned __int8)pBuf->get_short(&avartar_inven_slot) != 1
|| (unsigned __int8)pBuf->get_int(&avartar_item_id) != 1
|| (unsigned __int8)pBuf->get_byte(&emblem_cnt) != 1)
{
user->SendCmdErrorPacket(205, -1);
return PAK_IGNORE;
}
if (user->CheckItemLock(2, avartar_inven_slot))
{
user->SendCmdErrorPacket(205, 213);
return PAK_IGNORE;
}
//获取时装道具
CInventory* inven = user->getCurCharacInvenW();
if (!inven)
{
LOG("pUser->getCurCharacInvenW : error \n");
return PAK_IGNORE;
}
Inven_Item* avartar = inven->GetInvenRef(CInventory::INVENTORY_TYPE_AVARTAR, avartar_inven_slot);
if (!avartar)
{
LOG("inven->GetInvenRef : error \n");
return PAK_IGNORE;
}
//校验时装 数据是否合法
if (avartar->isEmpty() || (avartar->getKey() != avartar_item_id) || user->CheckItemLock(2, avartar_inven_slot))
{
LOG("avartar->isEmpty() || avartar->getKey() || pUser->CheckItemLock() : error \n");
return PAK_IGNORE;
}
//获取时装插槽数据
WongWork::CAvatarItemMgr* avartar_add_info = (WongWork::CAvatarItemMgr*)avartar->get_add_info();
WongWork::CAvatarItemMgr* inven_avartar_mgr = inven->GetAvatarItemMgrR();
int jewel_socket_data = inven_avartar_mgr->getJewelSocketData(avartar_add_info);
if (!jewel_socket_data)
{
LOG("jewel_socket_data : error \n");
return PAK_IGNORE;
}
LOG("jewel_socket_data :%s \n", Utils::ToHexString((const unsigned char*)jewel_socket_data, 40).c_str());
if (emblem_cnt <= 3)
{
std::map<int, std::pair<int, int>> emblems;
for (int i = 0; i < emblem_cnt; i++)
{
//徽章所在的背包槽
short emblem_inven_slot = 0;
pBuf->get_short(&emblem_inven_slot);
//徽章item_id
int emblem_item_id = 0;
pBuf->get_int(&emblem_item_id);
//该徽章镶嵌的时装插槽id
char avartar_socket_slot = 0;
pBuf->get_byte(&avartar_socket_slot);
//获取徽章道具
Inven_Item* emblem = inven->GetInvenRef(CInventory::INVENTORY_TYPE_ITEM, emblem_inven_slot);
//校验徽章及插槽数据是否合法
if (emblem->isEmpty() || (emblem->getKey() != emblem_item_id) || (avartar_socket_slot >= 3))
{
LOG("emblem->isEmpty() || (emblem->getKey() : error \n");
user->SendCmdErrorPacket(205, 209);
return PAK_IGNORE;
}
//校验徽章是否满足时装插槽颜色要求
//获取徽章pvf数据
CDataManager* DataManager = CDataManager::G_CDataManager();
if (!DataManager)
{
LOG("CDataManager::G_CDataManager() : error \n");
user->SendCmdErrorPacket(205, 209);
return PAK_IGNORE;
}
CStackableItem* citem = (CStackableItem*)DataManager->find_item(emblem_item_id);
if (!citem)
{
LOG("DataManager->find_item() : error \n");
user->SendCmdErrorPacket(205, 209);
return PAK_IGNORE;
}
//校验徽章类型
if (!citem->is_stackable() || (citem->GetItemType() != 20))
{
LOG("citem->is_stackable() || (citem->GetItemType() : error \n");
user->SendCmdErrorPacket(205, 209);
return PAK_IGNORE;
}
//获取徽章支持的插槽
int emblem_socket_type = citem->getJewelTargetSocket();
//获取要镶嵌的时装插槽类型
int avartar_socket_type = *(short*)(jewel_socket_data + avartar_socket_slot * 6);
if (!(emblem_socket_type & avartar_socket_type))
{
//插槽类型不匹配
LOG("emblem_socket_type & avartar_socket_type\n");
user->SendCmdErrorPacket(205, 209);
return PAK_IGNORE;
}
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)
{
//删除徽章
int emblem_inven_slot = avartar_socket_slot.second.first;
inven->delete_item(CInventory::INVENTORY_TYPE_ITEM, emblem_inven_slot, 1, 8, 1);
//设置时装插槽数据
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);
}
//时装插槽数据存档
DB_UpdateAvatarJewelSlot::makeRequest(user->getCurCharacNo(), avartar->get_ui_id(), (void*)jewel_socket_data);
//通知客户端时装数据已更新
user->SendUpdateItemList(1, 1, avartar_inven_slot);
LOG("徽章镶嵌完毕!!!");
//回包给客户端
InterfacePacketBuf* packet_guard = (InterfacePacketBuf*)PacketGuard::NewPacketGuard();
packet_guard->put_header(1, 204);
packet_guard->put_int(1);
packet_guard->finalize(1);
user->Send((PacketGuard*)packet_guard);
PacketGuard::DelPacketGuard((PacketGuard*)packet_guard);
return PAK_OK;
}
return PAK_IGNORE;
}

View File

@ -4,7 +4,7 @@
#include "import.h"
#include "inline_hook.h"
#include "Singleton.h"
#include "sdk_class.h"
#include "./sdk/sdk_class.h"
#include "utils.h"
class CDispatch
@ -18,6 +18,9 @@ public:
ENUM_PACK_RET_TYPE Dispatcher_ModItemAttr_dispatch_sig(Dispatcher_ModItemAttr* dis_mod, CUser* user, PacketBuf* pBuf);
ENUM_PACK_RET_TYPE UseJewel_dispatch_sig(void* pDispatcher_UseJewel, CUser* user, PacketBuf* pBuf);
protected:

145
src/sdk/AccountCargo.h Normal file
View File

@ -0,0 +1,145 @@
#pragma once
#ifndef __ACCOUNTCARGO_H__
#define __ACCOUNTCARGO_H__
#pragma pack(push, 0x01)
class CAccountCargo
{
public:
int GetCapacity()
{
return CallT<int>(base::CAccountCargo::GetCapacity, this);
}
int GetMoney()
{
return CallT<int>(base::CAccountCargo::GetMoney, this);
}
int SetDBData(CUser* a2, Inven_Item* a3, uint a4, uint a5)
{
return CallT<int>(base::CAccountCargo::SetDBData, this, a2, a3, a4, a5);
}
int Clear()
{
return CallT<int>(base::CAccountCargo::Clear, this);
}
int ResetSlot(int a2)
{
return CallT<int>(base::CAccountCargo::ResetSlot, this, a2);
}
int* GetSlot(int a2)
{
return CallT<int*>(base::CAccountCargo::GetSlot, this, a2);
}
int GetSlotRef(int a2)
{
return CallT<int>(base::CAccountCargo::GetSlotRef, this, a2);
}
int CheckInsertCondition(Inven_Item* a2)
{
return CallT<int>(base::CAccountCargo::CheckInsertCondition, this, a2);
}
int InsertItem(Inven_Item* a2, int a3)
{
return CallT<int>(base::CAccountCargo::InsertItem, this, a2, a3);
}
int DeleteItem(int a2, int a3)
{
return CallT<int>(base::CAccountCargo::DeleteItem, this, a2, a3);
}
int MoveItem(int a2, int a3)
{
return CallT<int>(base::CAccountCargo::MoveItem, this, a2, a3);
}
int DepositMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::DepositMoney, this, a2);
}
int WithdrawMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::WithdrawMoney, this, a2);
}
int CheckMoneyLimit(uint a2)
{
return CallT<int>(base::CAccountCargo::CheckMoneyLimit, this, a2);
}
int CheckValidSlot(int a2)
{
return CallT<int>(base::CAccountCargo::CheckValidSlot, this);
}
int GetEmptySlot()
{
return CallT<int>(base::CAccountCargo::GetEmptySlot, this);
}
int CheckSlotEmpty(int a2)
{
return CallT<int>(base::CAccountCargo::CheckSlotEmpty, this, a2);
}
int GetSpecificItemSlot(int a2)
{
return CallT<int>(base::CAccountCargo::GetSpecificItemSlot, this, a2);
}
int CheckStackLimit(int a2, int a3, int a4)
{
return CallT<int>(base::CAccountCargo::CheckStackLimit, this);
}
int AddMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::AddMoney, this, a2);
}
int SubMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::SubMoney, this, a2);
}
int GetItemCount()
{
return CallT<int>(base::CAccountCargo::GetItemCount, this);
}
int SendNotifyMoney(int a2)
{
return CallT<int>(base::CAccountCargo::SendNotifyMoney, this, a2);
}
int SendItemList()
{
return CallT<int>(base::CAccountCargo::SendItemList, this);
}
int MakeItemPacket(PacketGuard* a2, int a3)
{
return CallT<int>(base::CAccountCargo::MakeItemPacket, this, a2, a3);
}
int CreateAccountCargo(CUser* a2)
{
return CallT<int>(base::CAccountCargo::CreateAccountCargo, this, a2);
}
int UpgradeAccountCargo(CUser* a2)
{
return CallT<int>(base::CAccountCargo::UpgradeAccountCargo, this, a2);
}
int SendNotifyRecipe(CUser* a2, int a3, bool a4)
{
return CallT<int>(base::CAccountCargo::SendNotifyRecipe, this, a2, a3, a4);
}
int DeleteAccountCargo(CUser* a2)
{
return CallT<int>(base::CAccountCargo::DeleteAccountCargo, this, a2);
}
int SetStable()
{
return CallT<int>(base::CAccountCargo::SetStable, this);
}
int SetCapacity(uint a2)
{
return CallT<int>(base::CAccountCargo::SetCapacity, this, a2);
}
int IsAlter(void)
{
return CallT<int>(base::CAccountCargo::IsAlter, this);
}
};
#pragma pack(pop)
#endif // __ACCOUNTCARGO_H__

28
src/sdk/DataManager.h Normal file
View File

@ -0,0 +1,28 @@
#pragma once
#ifndef __DATAMANAGER_H__
#define __DATAMANAGER_H__
#pragma pack(push, 0x01)
class CDataManager
{
public:
static CDataManager* G_CDataManager(void)
{
typedef CDataManager* (*__func)(void);
return ((__func)base::CDataManager::G_CDataManager)();
}
//获取装备pvf数据
CItem* find_item(int a2)
{
typedef CItem* (*__func)(CDataManager* a1, int a2);
return ((__func)base::CDataManager::find_item)(this, a2);
}
};
#pragma pack(pop)
#endif // __DATAMANAGER_H__

71
src/sdk/Inventory.h Normal file
View File

@ -0,0 +1,71 @@
#pragma once
#ifndef __INVENTORY_H__
#define __INVENTORY_H__
#pragma pack(push, 0x01)
class CInventory
{
public:
enum INVEN_TYPE : int
{
INVENTORY_TYPE_BODY = 0, //身上穿的装备
INVENTORY_TYPE_ITEM = 1, //物品栏
INVENTORY_TYPE_AVARTAR = 2, //时装栏
};
public:
//获取时装管理器
WongWork::CAvatarItemMgr* GetAvatarItemMgrR()
{
typedef WongWork::CAvatarItemMgr* (*__func)(void* a1);
return ((__func)base::CInventory::GetAvatarItemMgrR)(this);
}
int delete_item(INVEN_TYPE a2, int pos, int num, int a5, int a6 = 1)
{
typedef int (*__func)(CInventory* a1, INVEN_TYPE a2, int a3, int a4, int a5, int a6);
return ((__func)base::CInventory::delete_item)(this, a2, pos, num, a5, a6);
}
//使用金币
int use_money(int a2, int a3, char a4)
{
typedef int (*__func)(CInventory* a1, int a2, int a3, char a4);
return ((__func)base::CInventory::use_money)(this, a2, a3, a4);
}
//获得金币
int gain_money(unsigned int a2, int a3, char a4, int a5)
{
typedef int (*__func)(CInventory* a1, unsigned int a2, int a3, char a4, int a5);
return ((__func)base::CInventory::gain_money)(this, a2, a3, a4, a5);
}
//获取背包槽中的道具
Inven_Item* GetInvenRef(INVEN_TYPE a2, int a3)
{
typedef Inven_Item* (*__func)(CInventory* a1, INVEN_TYPE a2, int a3);
return ((__func)base::CInventory::GetInvenRef)(this, a2, a3);
}
Inven_Item* GetInvenSlot(Inven_Item* a2, INVEN_TYPE a3, int a4)
{
typedef Inven_Item* (__attribute__((__stdcall__))* fnCInventory_GetInvenSlot)(Inven_Item* dest, CInventory* pThis, int space, int location);
static fnCInventory_GetInvenSlot CInventory_GetInvenSlot = (fnCInventory_GetInvenSlot)(base::CInventory::GetInvenSlot);
return CInventory_GetInvenSlot(a2, this, a3, a4);
}
int update_item(INVEN_TYPE a2, int a3, Inven_Item a4)
{
return CallT<int>(base::CInventory::update_item, this, a2, a3, a4);
}
};
#pragma pack(pop)
#endif // __INVENTORY_H__

346
src/sdk/Item.h Normal file
View File

@ -0,0 +1,346 @@
#pragma once
#ifndef __ITEM_H__
#define __ITEM_H__
#pragma pack(push, 0x01)
class CItem
{
public:
/**
* @brief
* @return
*/
bool is_stackable()
{
typedef bool (*__func)(CItem* a1);
return ((__func)base::CItem::is_stackable)(this);
}
bool IsRoutingItem()
{
typedef bool (*__func)(CItem* a1);
return ((__func)base::CItem::IsRoutingItem)(this);
}
/**
* @brief
* @return
*/
int GetAttachType()
{
return CallT<int>(base::CItem::GetAttachType, this);
}
int GetCashPrice()
{
return CallT<int>(base::CItem::GetCashPrice, this);
}
int GetDyeInfo()
{
return CallT<int>(base::CItem::GetDyeInfo, this);
}
int GetExpertJobAdditionalExp(int a2)
{
return CallT<int>(base::CItem::GetExpertJobAdditionalExp, this, a2);
}
int GetExpertJobCompoundMaterialVariation()
{
return CallT<int>(base::CItem::GetExpertJobCompoundMaterialVariation, this);
}
int GetExpertJobCompoundRateVariation()
{
return CallT<int>(base::CItem::GetExpertJobCompoundRateVariation, this);
}
int GetExpertJobCompoundResultVariation(int a2)
{
return CallT<int>(base::CItem::GetExpertJobCompoundResultVariation, this, a2);
}
int GetExpertJobSelfDisjointBigWinRate()
{
return CallT<int>(base::CItem::GetExpertJobSelfDisjointBigWinRate, this);
}
int GetExpertJobSelfDisjointResultVariation()
{
return CallT<int>(base::CItem::GetExpertJobSelfDisjointResultVariation, this);
}
int GetFinishPointPrice()
{
return CallT<int>(base::CItem::GetFinishPointPrice, this);
}
int GetIncreaseStatusIntData(int a2, int& a3)
{
return CallT<int>(base::CItem::GetIncreaseStatusIntData, this, a2, a3);
}
int GetIncreaseStatusType()
{
return CallT<int>(base::CItem::GetIncreaseStatusType, this);
}
int GetItemIconName()
{
return CallT<int>(base::CItem::GetItemIconName, this);
}
int GetItemName()
{
return CallT<int>(base::CItem::GetItemName, this);
}
int GetMedalPrice()
{
return CallT<int>(base::CItem::GetMedalPrice, this);
}
int GetNeedLevel()
{
return CallT<int>(base::CItem::GetNeedLevel, this);
}
int GetNeedMaterial()
{
return CallT<int>(base::CItem::GetNeedMaterial, this);
}
int GetQuestItemDropBouns()
{
return CallT<int>(base::CItem::GetQuestItemDropBouns, this);
}
int GetRandomOptionGrade()
{
return CallT<int>(base::CItem::GetRandomOptionGrade, this);
}
int GetSellPrice()
{
return CallT<int>(base::CItem::GetSellPrice, this);
}
int GetUpSkillType()
{
return CallT<int>(base::CItem::GetUpSkillType, this);
}
int GetUsablePvPRank()
{
return CallT<int>(base::CItem::GetUsablePvPRank, this);
}
int getAdvanceAltarNeedGage()
{
return CallT<int>(base::CItem::getAdvanceAltarNeedGage, this);
}
int getExpirationDate()
{
return CallT<int>(base::CItem::getExpirationDate, this);
}
int getFootControlRateLimit()
{
return CallT<int>(base::CItem::getFootControlRateLimit, this);
}
int getItemGroupName()
{
return CallT<int>(base::CItem::getItemGroupName, this);
}
int getUsableLevel()
{
return CallT<int>(base::CItem::getUsableLevel, this);
}
int getUsablePeriod()
{
return CallT<int>(base::CItem::getUsablePeriod, this);
}
int get_gen_rate()
{
return CallT<int>(base::CItem::get_gen_rate, this);
}
int get_grade()
{
return CallT<int>(base::CItem::get_grade, this);
}
int get_index()
{
return CallT<int>(base::CItem::get_index, this);
}
int get_need_skill()
{
return CallT<int>(base::CItem::get_need_skill, this);
}
int get_price()
{
return CallT<int>(base::CItem::get_price, this);
}
int get_rarity()
{
return CallT<int>(base::CItem::get_rarity, this);
}
private:
};
class CStackableItem : public CItem
{
public:
//获取消耗品类型
int GetItemType()
{
typedef int (*__func)(void* a1);
return ((__func)base::CStackableItem::GetItemType)(this);
}
//获取徽章支持的镶嵌槽类型
int getJewelTargetSocket()
{
typedef int (*__func)(CStackableItem* a1);
return ((__func)base::CStackableItem::getJewelTargetSocket)(this);
}
};
class CEquipItem : public CItem
{
public:
int GetItemType()
{
return CallT<int>(base::CEquipItem::GetItemType, this);
}
};
class Inven_Item
{
public:
unsigned char package;
unsigned char UnknownData_NUSL[0x3C];
public:
//获取道具附加信息
int get_add_info()
{
typedef int (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::get_add_info)(this);
}
//检查背包中道具是否为空
bool isEmpty()
{
typedef bool (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::isEmpty)(this);
}
//获取背包中道具item_id
int getKey()
{
typedef int (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::getKey)(this);
}
//道具是否是装备
bool isEquipableItemType()
{
typedef bool (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::isEquipableItemType)(this);
}
int get_ui_id()
{
return *(int*)(this + 0x7);
}
bool IsTradeLimitAttachTypeItem()
{
return CallT<bool>(base::Inven_Item::IsTradeLimitAttachTypeItem, this);
}
int GetItemSpace()
{
return CallT<int>(base::Inven_Item::GetItemSpace, this);
}
int SetReSealCount(uchar a2)
{
return CallT<int>(base::Inven_Item::SetReSealCount, this, a2);
}
int GetReSealCount()
{
return CallT<int>(base::Inven_Item::GetReSealCount, this);
}
};
class DB_UpdateAvatarJewelSlot
{
public:
static int makeRequest(int a1, unsigned int a2, void* src)
{
typedef int (*__func)(int a1, unsigned int a2, void* src);
return ((__func)base::DB_UpdateAvatarJewelSlot::makeRequest)(a1, a2, src);
}
};
class Dispatcher_ModItemAttr
{
public:
int _SendResult(CUser* a2, ushort a3, ushort a4, ushort a5)
{
return CallT<int>(base::Dispatcher_ModItemAttr::_SendResult, this, a2, a3, a4, a5);
}
};
class stMoveItemParam
{
public:
static stMoveItemParam* NewstMoveItemParam()
{
void* v62 = malloc(0x20000);
if (!v62) return NULL;
CallT<int>(base::stMoveItemParam::stMoveItemParam_make, v62);
return (stMoveItemParam*)v62;
}
static void DelstMoveItemParam(stMoveItemParam* a1)
{
CallT<int>(base::stMoveItemParam::stMoveItemParam_destroy, a1);
free(a1);
}
static void DelstMoveItemParam2(stMoveItemParam* a1)
{
CallT<int>(base::stMoveItemParam::stMoveItemParam_del, a1);
}
};
#pragma pack(pop)
#endif // __ITEM_H__

341
src/sdk/PacketBuf.h Normal file
View File

@ -0,0 +1,341 @@
#pragma once
#ifndef __PACKETBUF_H__
#define __PACKETBUF_H__
#pragma pack(push, 0x01)
class PacketBuf
{
public:
unsigned char UnknownData_0000[0x20000];
public:
PacketBuf()
{
memset(UnknownData_0000, 0, sizeof(UnknownData_0000));
CallT<PacketBuf*>(base::PacketBuf::PacketBuf_make, this);
}
~PacketBuf()
{
CallT<int>(base::PacketBuf::PacketBuf_destroy, this);
}
static PacketBuf* NewPacketBuf()
{
void* v62 = malloc(0x20000);
if (!v62) return NULL;
return CallT<PacketBuf*>(base::PacketBuf::PacketBuf_make, v62);
}
static void DelPacketBuf(PacketBuf* a1)
{
CallT<int>(base::PacketBuf::PacketBuf_destroy, a1);
free(a1);
}
int at(int a2)
{
return CallT<int>(base::PacketBuf::at, this, a2);
}
int bind_packet(char* a2, int a3)
{
return CallT<int>(base::PacketBuf::bind_packet, this, a2, a3);
}
int clear()
{
return CallT<int>(base::PacketBuf::clear, this);
}
int clear_ptr()
{
return CallT<int>(base::PacketBuf::clear_ptr, this);
}
int compress_packet()
{
return CallT<int>(base::PacketBuf::compress_packet, this);
}
int copy(PacketBuf const& a2)
{
return CallT<int>(base::PacketBuf::copy, this, a2);
}
int encFinalize()
{
return CallT<int>(base::PacketBuf::encFinalize, this);
}
int encrypt_packet()
{
return CallT<int>(base::PacketBuf::encrypt_packet, this);
}
int finalize(bool a2)
{
return CallT<int>(base::PacketBuf::finalize, this, a2);
}
int getLastError()
{
return CallT<int>(base::PacketBuf::getLastError, this);
}
int get_binary(char* a2, int a3)
{
return CallT<int>(base::PacketBuf::get_binary, this, a2, a3);
}
int get_buf_ptr(int a2)
{
return CallT<int>(base::PacketBuf::get_buf_ptr, this, a2);
}
int get_byte(char* a2)
{
return CallT<int>(base::PacketBuf::get_byte, this, a2);
}
int get_byte_u(uchar* a2)
{
return CallT<int>(base::PacketBuf::get_byte_u, this, a2);
}
int get_index()
{
return CallT<int>(base::PacketBuf::get_index, this);
}
int get_int(int* a2)
{
return CallT<int>(base::PacketBuf::get_int, this, a2);
}
int get_int_u(uint* a2)
{
return CallT<int>(base::PacketBuf::get_int_u, this, a2);
}
int get_int_ul(ulong* a2)
{
return CallT<int>(base::PacketBuf::get_int_ul, this, a2);
}
int get_item_idx(ulong* a2)
{
return CallT<int>(base::PacketBuf::get_item_idx, this, a2);
}
int get_len()
{
return CallT<int>(base::PacketBuf::get_len, this);
}
int get_packet(int a2)
{
return CallT<int>(base::PacketBuf::get_packet, this, a2);
}
int get_short(short* a2)
{
return CallT<int>(base::PacketBuf::get_short, this, a2);
}
int get_short_u(ushort* a2)
{
return CallT<int>(base::PacketBuf::get_short_u, this, a2);
}
int get_str(char* a2, int a3, int a4)
{
return CallT<int>(base::PacketBuf::get_str, this, a2, a3, a4);
}
int isCompressRequired(char* a2)
{
return CallT<int>(base::PacketBuf::isCompressRequired, this, a2);
}
int isEncryptRequired()
{
return CallT<int>(base::PacketBuf::isEncryptRequired, this);
}
int is_finallized()
{
return CallT<int>(base::PacketBuf::is_finallized, this);
}
int is_len_end(int a2)
{
return CallT<int>(base::PacketBuf::is_len_end, this, a2);
}
int is_ptr_end(int a2, int a3)
{
return CallT<int>(base::PacketBuf::is_ptr_end, this, a2, a3);
}
int put_binary(char* a2, int a3)
{
return CallT<int>(base::PacketBuf::put_binary, this, a2, a3);
}
int put_binary_c(char const* a2, int a3)
{
return CallT<int>(base::PacketBuf::put_binary_c, this, a2, a3);
}
int put_byte(int a2)
{
return CallT<int>(base::PacketBuf::put_byte, this, a2);
}
int put_header(int a2, int a3)
{
return CallT<int>(base::PacketBuf::put_header, this, a2, a3);
}
int put_int(int a2)
{
return CallT<int>(base::PacketBuf::put_int, this, a2);
}
int put_item_idx(ulong a2)
{
return CallT<int>(base::PacketBuf::put_item_idx, this, a2);
}
int put_packet(Inven_Item const& a2)
{
return CallT<int>(base::PacketBuf::put_packet, this, a2);
}
int put_short(int a2)
{
return CallT<int>(base::PacketBuf::put_short, this, a2);
}
int put_str(char* a2, int a3)
{
return CallT<int>(base::PacketBuf::put_str, this, a2, a3);
}
int put_str_c(char const* a2, int a3)
{
return CallT<int>(base::PacketBuf::put_str_c, this, a2, a3);
}
int setLastError(int a2)
{
return CallT<int>(base::PacketBuf::setLastError, this, a2);
}
int set_index(int a2)
{
return CallT<int>(base::PacketBuf::set_index, this, a2);
}
int set_packet(char const* a2, int a3)
{
return CallT<int>(base::PacketBuf::set_packet, this, a2, a3);
}
};
class InterfacePacketBuf
{
public:
int put_header(int a2, int a3)
{
typedef int (*__func)(InterfacePacketBuf* a1, int a2, int a3);
return ((__func)base::InterfacePacketBuf::put_header)(this, a2, a3);
}
int put_byte(char a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, char a2);
return ((__func)base::InterfacePacketBuf::put_byte)(this, a2);
}
int put_short(short a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, short a2);
return ((__func)base::InterfacePacketBuf::put_short)(this, a2);
}
int put_int(int a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, int a2);
return ((__func)base::InterfacePacketBuf::put_int)(this, a2);
}
int put_binary(char* a2, int a3)
{
typedef int (*__func)(InterfacePacketBuf* a1, char* a2, int a3);
return ((__func)base::InterfacePacketBuf::put_binary)(this, a2, a3);
}
int finalize(bool a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, bool a2);
return ((__func)base::InterfacePacketBuf::finalize)(this, a2);
}
int put_str(const char* a2, int a3)
{
typedef int (*__func)(InterfacePacketBuf* a1, const char* a2, int a3);
return ((__func)base::InterfacePacketBuf::put_str)(this, a2, a3);
}
int put_packet(const Inven_Item* a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, const Inven_Item* a2);
return ((__func)base::InterfacePacketBuf::put_packet)(this, a2);
}
};
class PacketGuard
{
public:
static PacketGuard* NewPacketGuard()
{
void* v62 = malloc(0x20000);
typedef int (*__func)(void* a1);
if (!v62) return NULL;
((__func)base::PacketGuard::PacketGuard_make)(v62);
return (PacketGuard*)v62;
}
static void DelPacketGuard(PacketGuard* a1)
{
typedef int (*__func)(void* a1);
((__func)base::PacketGuard::PacketGuard_destroy)(a1);
free(a1);
}
};
class PacketDispatcher
{
public:
int getDispatcher(int a2)
{
typedef int (*__func)(PacketDispatcher* a1, int a2);
return ((__func)base::PacketDispatcher::getDispatcher)(this, a2);
}
void** get_dispatcher(int a2)
{
typedef void** (*__func)(PacketDispatcher* a1, int a2);
return ((__func)base::PacketDispatcher::get_dispatcher)(this, a2);
}
};
#pragma pack(pop)
#endif // __PACKETBUF_H__

159
src/sdk/User.h Normal file
View File

@ -0,0 +1,159 @@
#pragma once
#ifndef __CUSER_H__
#define __CUSER_H__
#pragma pack(push, 0x01)
class CUserCharacInfo
{
public:
//获取角色名字
std::string getCurCharacName()
{
typedef char* (*__func)(CUserCharacInfo* a1);
return std::string(((__func)base::CUserCharacInfo::getCurCharacName)(this));
}
//获取角色编号
int getCurCharacNo()
{
typedef int (*__func)(CUserCharacInfo* a1);
return int(((__func)base::CUserCharacInfo::getCurCharacNo)(this));
}
//获取角色上次退出游戏时间
int getCurCharacLastPlayTick()
{
typedef int (*__func)(CUserCharacInfo* a1);
return int(((__func)base::CUserCharacInfo::getCurCharacLastPlayTick)(this));
}
//获取角色等级
int get_level_up_exp(int a2)
{
typedef int (*__func)(CUserCharacInfo* a1, int a2);
return int(((__func)base::CUserCharacInfo::get_level_up_exp)(this, a2));
}
//获取角色背包
CInventory* getCurCharacInvenW()
{
typedef CInventory* (*__func)(CUserCharacInfo* a1);
return ((__func)base::CUserCharacInfo::getCurCharacInvenW)(this);
}
bool _checkItemMovable(int a2, int a3, int a4, int a5, int a6, int a7)
{
CallT<bool>(base::CUserCharacInfo::_checkItemMovable, this, a2, a3, a4, a5, a6, a7);
}
CInventory* getCurCharacInvenR()
{
return CallT<CInventory*>(base::CUserCharacInfo::getCurCharacInvenR, this);
}
int getCurCharacR()
{
return CallT<int>(base::CUserCharacInfo::getCurCharacR, this);
}
};
class CUser : public CUserCharacInfo
{
public:
int get_state()
{
typedef int (*__func)(CUser* a1);
return int(((__func)base::CUser::get_state)(this));
}
/**
* @brief
* @param a2
* @param a3
* @return
*/
bool CheckItemLock(int a2, int a3)
{
typedef bool (*__func)(CUser* a1, int a2, int a3);
return int(((__func)base::CUser::CheckItemLock)(this, a2, a3));
}
int SendNotiPacketMessage(char* a2, int a3)
{
typedef bool (*__func)(CUser* a1, char* a2, int a3);
return int(((__func)base::CUser::SendNotiPacketMessage)(this, a2, a3));
}
//角色增加经验
int gain_exp_sp(unsigned int a2, int a3, int a4, int a5, int a6, int a7)
{
typedef int (*__func)(CUserCharacInfo* a1, unsigned int a2, int a3, int a4, int a5, int a6, int a7);
return int(((__func)base::CUser::gain_exp_sp)(this, a2, a3, a4, a5, a6, a7));
}
//发送道具
int AddItem(int a2, int a3, int a4, int a5, int a6)
{
typedef int (*__func)(CUser* a1, int a2, int a3, int a4, int a5, int a6);
return int(((__func)base::CUser::AddItem)(this, a2, a3, a4, a5, a6));
}
//通知客户端道具更新(客户端指针, 通知方式[仅客户端=1, 世界广播=0, 小队=2, war room=3], itemSpace[装备=0, 时装=1], 道具所在的背包槽)
int SendUpdateItemList(int a2, int a3, int a4)
{
typedef int (*__func)(CUserCharacInfo* a1, int a2, int a3, int a4);
return int(((__func)base::CUser::SendUpdateItemList)(this, a2, a3, a4));
}
int SendCmdErrorPacket(int packet_id, unsigned char a3)
{
typedef int (*__func)(CUser* a1, int a2, unsigned char a3);
return int(((__func)base::CUser::SendCmdErrorPacket)(this, packet_id, a3));
}
int isEnableAvatarSocketAction()
{
typedef int (*__func)(CUser* a1);
return int(((__func)base::CUser::isEnableAvatarSocketAction)(this));
}
int Send(PacketGuard* a2)
{
typedef int (*__func)(CUser* a1, PacketGuard* a2);
return int(((__func)base::CUser::Send)(this, a2));
}
CUser* setLastPacketID(int a2)
{
return CallT<CUser*>(base::CUser::setLastPacketID, this, a2);
}
CAccountCargo* GetAccountCargo()
{
return CallT<CAccountCargo*>(base::CUser::GetAccountCargo, this);
}
int CheckInTrade()
{
return CallT<int>(base::CUser::CheckInTrade, this);
}
bool IsExistAccountCargo()
{
return CallT<bool>(base::CUser::IsExistAccountCargo, this);
}
int send_itemspace(int a2)
{
return CallT<bool>(base::CUser::send_itemspace, this, a2);
}
};
#pragma pack(pop)
#endif // __CUSER_H__

View File

@ -164,14 +164,51 @@ namespace base
{
const int PacketBuf_make = 0x0858C8C0;
const int PacketBuf_destroy = 0x0858C8DC;
const int at = 0x0822B6D4;
const int bind_packet = 0x0858D4DE;
const int get_len = 0x0858DA52;
const int get_buf_ptr = 0x0858DA38;
const int get_byte = 0x858CF22;
const int get_short = 0x858CFC0;
const int get_int = 0x858D27E;
const int get_binary = 0x858D3B2;
const int clear = 0x0858C8E2;
const int clear_ptr = 0x0858C93A;
const int compress_packet = 0x0858DAA2;
const int copy = 0x0858DCD2;
const int encFinalize = 0x0858DF30;
const int encrypt_packet = 0x0858D86A;
const int finalize = 0x0858D548;
const int getLastError = 0x086D18E2;
const int get_binary = 0x0858D3B2;
const int get_buf_ptr = 0x0858DA38;
const int get_byte = 0x0858CF22;
const int get_byte_u = 0x0858CF70;
const int get_index = 0x08110B1C;
const int get_int = 0x0858D0F0;
const int get_int_u = 0x0858D240;
const int get_int_ul = 0x0858D27E;
const int get_item_idx = 0x0822B6E8;
const int get_len = 0x0858DA52;
const int get_packet = 0x0822B702;
const int get_short = 0x0858CFC0;
const int get_short_u = 0x0858D0B0;
const int get_str = 0x0858D2BC;
const int isCompressRequired = 0x0858E248;
const int isEncryptRequired = 0x0858DA28;
const int is_finallized = 0x0848F390;
const int is_len_end = 0x0858CEFC;
const int is_ptr_end = 0x0858CEC4;
const int put_binary = 0x0811DEDC;
const int put_binary_c = 0x0815093E;
const int put_byte = 0x080CB89E;
const int put_header = 0x0858C94A;
const int put_int = 0x080CB8C2;
const int put_item_idx = 0x0822B6B0;
const int put_packet = 0x0858DC2E;
const int put_short = 0x080D9E80;
const int put_str = 0x081B73B8;
const int put_str_c = 0x0822B684;
const int setLastError = 0x0858E286;
const int set_index = 0x081252BA;
const int set_packet = 0x0858D462;
}
namespace InterfacePacketBuf

120
src/sdk/sdk_class.h Normal file
View File

@ -0,0 +1,120 @@
#ifndef USER_CLASS_H
#define USER_CLASS_H
#include "base.h"
#include "enum.h"
#include "ida_sdk.h"
#include <string>
template<typename R, typename A, typename ... ARG> R CallT(A call_addr, const ARG ... arguments)
{
if (!call_addr)
{
return R();
}
const auto control = reinterpret_cast<R(*)(ARG...)>(call_addr);
try
{
return control(arguments ...);
}
catch (...)
{
}
return R();
}
class CAccountCargo;
class DB_UpdateAvatarJewelSlot;
class CInventory;
class CStackableItem;
class Inven_Item;
class CItem;
class CUserCharacInfo;
class CUser;
class PacketBuf;
class PacketGuard;
class InterfacePacketBuf;
class Dispatcher_ModItemAttr;
#pragma pack(push, 0x01)
namespace WongWork
{
class CAvatarItemMgr
{
public:
//获取时装插槽数据
int getJewelSocketData(WongWork::CAvatarItemMgr* a2)
{
typedef int (*__func)(WongWork::CAvatarItemMgr* a1, void* a2);
return ((__func)base::WongWork::CAvatarItemMgr::getJewelSocketData)(this, a2);
}
};
class CHackAnalyzer
{
public:
int addServerHackCnt(CUserCharacInfo* a2, int a3, int a4, int a5, int a6)
{
typedef int (*__func)(WongWork::CHackAnalyzer* a1, CUserCharacInfo* a2, int a3, int a4, int a5, int a6);
return CallT<int>(base::WongWork::CHackAnalyzer::addServerHackCnt, this, a2, a3, a4, a5, a6);
return ((__func)base::WongWork::CHackAnalyzer::addServerHackCnt)(this, a2, a3, a4, a5, a6);
}
};
}
class CSecu_ProtectionField
{
public:
static CSecu_ProtectionField* Get()
{
return (CSecu_ProtectionField*)(*(int*)base::GlobalData::s_pSecuProtectionField);
}
int Check(CUser* a2, int a3)
{
return CallT<int>(base::CSecu_ProtectionField::Check, this, a2, a3);
}
};
class cUserHistoryLog
{
public:
};
class AvatarRechargeServer
{
public:
static AvatarRechargeServer* Get()
{
return CallT<AvatarRechargeServer*>(base::AvatarRechargeServer::Get);
}
char SendDurability(CUser* a2, char a3, short a4, char a5, int a6)
{
return CallT<char>(base::AvatarRechargeServer::SendDurability, this, a2, a3, a4, a5, a6);
}
};
#pragma pack(pop)
#include "User.h"
#include "AccountCargo.h"
#include "Item.h"
#include "DataManager.h"
#include "Inventory.h"
#include "PacketBuf.h"
#endif // __DXFBASE_H__

View File

@ -1,982 +0,0 @@
#ifndef USER_CLASS_H
#define USER_CLASS_H
#include "base.h"
#include "enum.h"
#include "ida_sdk.h"
#include <string>
#pragma pack(push, 0x01)
template<typename R, typename A, typename ... ARG> R CallT(A call_addr, const ARG ... arguments)
{
if (!call_addr)
{
return R();
}
const auto control = reinterpret_cast<R(*)(ARG...)>(call_addr);
try
{
return control(arguments ...);
}
catch (...)
{
}
return R();
}
class CAccountCargo;
class DB_UpdateAvatarJewelSlot;
class CInventory;
class CStackableItem;
class Inven_Item;
class CItem;
class CUserCharacInfo;
class CUser;
class PacketBuf;
class PacketGuard;
class InterfacePacketBuf;
class Dispatcher_ModItemAttr;
namespace WongWork
{
class CAvatarItemMgr
{
public:
//获取时装插槽数据
int getJewelSocketData(WongWork::CAvatarItemMgr* a2)
{
typedef int (*__func)(WongWork::CAvatarItemMgr* a1, void* a2);
return ((__func)base::WongWork::CAvatarItemMgr::getJewelSocketData)(this, a2);
}
};
class CHackAnalyzer
{
public:
int addServerHackCnt(CUserCharacInfo* a2, int a3, int a4, int a5, int a6)
{
typedef int (*__func)(WongWork::CHackAnalyzer* a1, CUserCharacInfo* a2, int a3, int a4, int a5, int a6);
return CallT<int>(base::WongWork::CHackAnalyzer::addServerHackCnt, this, a2, a3, a4, a5, a6);
return ((__func)base::WongWork::CHackAnalyzer::addServerHackCnt)(this, a2, a3, a4, a5, a6);
}
};
}
class CUserCharacInfo
{
public:
//获取角色名字
std::string getCurCharacName()
{
typedef char* (*__func)(CUserCharacInfo* a1);
return std::string(((__func)base::CUserCharacInfo::getCurCharacName)(this));
}
//获取角色编号
int getCurCharacNo()
{
typedef int (*__func)(CUserCharacInfo* a1);
return int(((__func)base::CUserCharacInfo::getCurCharacNo)(this));
}
//获取角色上次退出游戏时间
int getCurCharacLastPlayTick()
{
typedef int (*__func)(CUserCharacInfo* a1);
return int(((__func)base::CUserCharacInfo::getCurCharacLastPlayTick)(this));
}
//获取角色等级
int get_level_up_exp(int a2)
{
typedef int (*__func)(CUserCharacInfo* a1, int a2);
return int(((__func)base::CUserCharacInfo::get_level_up_exp)(this, a2));
}
//获取角色背包
CInventory* getCurCharacInvenW()
{
typedef CInventory* (*__func)(CUserCharacInfo* a1);
return ((__func)base::CUserCharacInfo::getCurCharacInvenW)(this);
}
bool _checkItemMovable(int a2, int a3, int a4, int a5, int a6, int a7)
{
CallT<bool>(base::CUserCharacInfo::_checkItemMovable, this, a2, a3, a4, a5, a6, a7);
}
CInventory* getCurCharacInvenR()
{
return CallT<CInventory*>(base::CUserCharacInfo::getCurCharacInvenR, this);
}
int getCurCharacR()
{
return CallT<int>(base::CUserCharacInfo::getCurCharacR, this);
}
};
class CUser : public CUserCharacInfo
{
public:
int get_state()
{
typedef int (*__func)(CUser* a1);
return int(((__func)base::CUser::get_state)(this));
}
/**
* @brief
* @param a2
* @param a3
* @return
*/
bool CheckItemLock(int a2, int a3)
{
typedef bool (*__func)(CUser* a1, int a2, int a3);
return int(((__func)base::CUser::CheckItemLock)(this, a2, a3));
}
int SendNotiPacketMessage(char* a2, int a3)
{
typedef bool (*__func)(CUser* a1, char* a2, int a3);
return int(((__func)base::CUser::SendNotiPacketMessage)(this, a2, a3));
}
//角色增加经验
int gain_exp_sp(unsigned int a2, int a3, int a4, int a5, int a6, int a7)
{
typedef int (*__func)(CUserCharacInfo* a1, unsigned int a2, int a3, int a4, int a5, int a6, int a7);
return int(((__func)base::CUser::gain_exp_sp)(this, a2, a3, a4, a5, a6, a7));
}
//发送道具
int AddItem(int a2, int a3, int a4, int a5, int a6)
{
typedef int (*__func)(CUser* a1, int a2, int a3, int a4, int a5, int a6);
return int(((__func)base::CUser::AddItem)(this, a2, a3, a4, a5, a6));
}
//通知客户端道具更新(客户端指针, 通知方式[仅客户端=1, 世界广播=0, 小队=2, war room=3], itemSpace[装备=0, 时装=1], 道具所在的背包槽)
int SendUpdateItemList(int a2, int a3, int a4)
{
typedef int (*__func)(CUserCharacInfo* a1, int a2, int a3, int a4);
return int(((__func)base::CUser::SendUpdateItemList)(this, a2, a3, a4));
}
int SendCmdErrorPacket(int packet_id, unsigned char a3)
{
typedef int (*__func)(CUser* a1, int a2, unsigned char a3);
return int(((__func)base::CUser::SendCmdErrorPacket)(this, packet_id, a3));
}
int isEnableAvatarSocketAction()
{
typedef int (*__func)(CUser* a1);
return int(((__func)base::CUser::isEnableAvatarSocketAction)(this));
}
int Send(PacketGuard* a2)
{
typedef int (*__func)(CUser* a1, PacketGuard* a2);
return int(((__func)base::CUser::Send)(this, a2));
}
CUser* setLastPacketID(int a2)
{
return CallT<CUser*>(base::CUser::setLastPacketID, this, a2);
}
CAccountCargo* GetAccountCargo()
{
return CallT<CAccountCargo*>(base::CUser::GetAccountCargo, this);
}
int CheckInTrade()
{
return CallT<int>(base::CUser::CheckInTrade, this);
}
bool IsExistAccountCargo()
{
return CallT<bool>(base::CUser::IsExistAccountCargo, this);
}
int send_itemspace(int a2)
{
return CallT<bool>(base::CUser::send_itemspace, this, a2);
}
};
class CAccountCargo
{
public:
int GetCapacity()
{
return CallT<int>(base::CAccountCargo::GetCapacity, this);
}
int GetMoney()
{
return CallT<int>(base::CAccountCargo::GetMoney, this);
}
int SetDBData(CUser* a2, Inven_Item* a3, uint a4, uint a5)
{
return CallT<int>(base::CAccountCargo::SetDBData, this, a2, a3, a4, a5);
}
int Clear()
{
return CallT<int>(base::CAccountCargo::Clear, this);
}
int ResetSlot(int a2)
{
return CallT<int>(base::CAccountCargo::ResetSlot, this, a2);
}
int* GetSlot(int a2)
{
return CallT<int*>(base::CAccountCargo::GetSlot, this, a2);
}
int GetSlotRef(int a2)
{
return CallT<int>(base::CAccountCargo::GetSlotRef, this, a2);
}
int CheckInsertCondition(Inven_Item* a2)
{
return CallT<int>(base::CAccountCargo::CheckInsertCondition, this, a2);
}
int InsertItem(Inven_Item* a2, int a3)
{
return CallT<int>(base::CAccountCargo::InsertItem, this, a2, a3);
}
int DeleteItem(int a2, int a3)
{
return CallT<int>(base::CAccountCargo::DeleteItem, this, a2, a3);
}
int MoveItem(int a2, int a3)
{
return CallT<int>(base::CAccountCargo::MoveItem, this, a2, a3);
}
int DepositMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::DepositMoney, this, a2);
}
int WithdrawMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::WithdrawMoney, this, a2);
}
int CheckMoneyLimit(uint a2)
{
return CallT<int>(base::CAccountCargo::CheckMoneyLimit, this, a2);
}
int CheckValidSlot(int a2)
{
return CallT<int>(base::CAccountCargo::CheckValidSlot, this);
}
int GetEmptySlot()
{
return CallT<int>(base::CAccountCargo::GetEmptySlot, this);
}
int CheckSlotEmpty(int a2)
{
return CallT<int>(base::CAccountCargo::CheckSlotEmpty, this, a2);
}
int GetSpecificItemSlot(int a2)
{
return CallT<int>(base::CAccountCargo::GetSpecificItemSlot, this, a2);
}
int CheckStackLimit(int a2, int a3, int a4)
{
return CallT<int>(base::CAccountCargo::CheckStackLimit, this);
}
int AddMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::AddMoney, this, a2);
}
int SubMoney(uint a2)
{
return CallT<int>(base::CAccountCargo::SubMoney, this, a2);
}
int GetItemCount()
{
return CallT<int>(base::CAccountCargo::GetItemCount, this);
}
int SendNotifyMoney(int a2)
{
return CallT<int>(base::CAccountCargo::SendNotifyMoney, this, a2);
}
int SendItemList()
{
return CallT<int>(base::CAccountCargo::SendItemList, this);
}
int MakeItemPacket(PacketGuard* a2, int a3)
{
return CallT<int>(base::CAccountCargo::MakeItemPacket, this, a2, a3);
}
int CreateAccountCargo(CUser* a2)
{
return CallT<int>(base::CAccountCargo::CreateAccountCargo, this, a2);
}
int UpgradeAccountCargo(CUser* a2)
{
return CallT<int>(base::CAccountCargo::UpgradeAccountCargo, this, a2);
}
int SendNotifyRecipe(CUser* a2, int a3, bool a4)
{
return CallT<int>(base::CAccountCargo::SendNotifyRecipe, this, a2, a3, a4);
}
int DeleteAccountCargo(CUser* a2)
{
return CallT<int>(base::CAccountCargo::DeleteAccountCargo, this, a2);
}
int SetStable()
{
return CallT<int>(base::CAccountCargo::SetStable, this);
}
int SetCapacity(uint a2)
{
return CallT<int>(base::CAccountCargo::SetCapacity, this, a2);
}
int IsAlter(void)
{
return CallT<int>(base::CAccountCargo::IsAlter, this);
}
};
class CItem
{
public:
/**
* @brief
* @return
*/
bool is_stackable()
{
typedef bool (*__func)(CItem* a1);
return ((__func)base::CItem::is_stackable)(this);
}
bool IsRoutingItem()
{
typedef bool (*__func)(CItem* a1);
return ((__func)base::CItem::IsRoutingItem)(this);
}
/**
* @brief
* @return
*/
int GetAttachType()
{
return CallT<int>(base::CItem::GetAttachType, this);
}
int GetCashPrice()
{
return CallT<int>(base::CItem::GetCashPrice, this);
}
int GetDyeInfo()
{
return CallT<int>(base::CItem::GetDyeInfo, this);
}
int GetExpertJobAdditionalExp(int a2)
{
return CallT<int>(base::CItem::GetExpertJobAdditionalExp, this, a2);
}
int GetExpertJobCompoundMaterialVariation()
{
return CallT<int>(base::CItem::GetExpertJobCompoundMaterialVariation, this);
}
int GetExpertJobCompoundRateVariation()
{
return CallT<int>(base::CItem::GetExpertJobCompoundRateVariation, this);
}
int GetExpertJobCompoundResultVariation(int a2)
{
return CallT<int>(base::CItem::GetExpertJobCompoundResultVariation, this, a2);
}
int GetExpertJobSelfDisjointBigWinRate()
{
return CallT<int>(base::CItem::GetExpertJobSelfDisjointBigWinRate, this);
}
int GetExpertJobSelfDisjointResultVariation()
{
return CallT<int>(base::CItem::GetExpertJobSelfDisjointResultVariation, this);
}
int GetFinishPointPrice()
{
return CallT<int>(base::CItem::GetFinishPointPrice, this);
}
int GetIncreaseStatusIntData(int a2, int& a3)
{
return CallT<int>(base::CItem::GetIncreaseStatusIntData, this, a2, a3);
}
int GetIncreaseStatusType()
{
return CallT<int>(base::CItem::GetIncreaseStatusType, this);
}
int GetItemIconName()
{
return CallT<int>(base::CItem::GetItemIconName, this);
}
int GetItemName()
{
return CallT<int>(base::CItem::GetItemName, this);
}
int GetMedalPrice()
{
return CallT<int>(base::CItem::GetMedalPrice, this);
}
int GetNeedLevel()
{
return CallT<int>(base::CItem::GetNeedLevel, this);
}
int GetNeedMaterial()
{
return CallT<int>(base::CItem::GetNeedMaterial, this);
}
int GetQuestItemDropBouns()
{
return CallT<int>(base::CItem::GetQuestItemDropBouns, this);
}
int GetRandomOptionGrade()
{
return CallT<int>(base::CItem::GetRandomOptionGrade, this);
}
int GetSellPrice()
{
return CallT<int>(base::CItem::GetSellPrice, this);
}
int GetUpSkillType()
{
return CallT<int>(base::CItem::GetUpSkillType, this);
}
int GetUsablePvPRank()
{
return CallT<int>(base::CItem::GetUsablePvPRank, this);
}
int getAdvanceAltarNeedGage()
{
return CallT<int>(base::CItem::getAdvanceAltarNeedGage, this);
}
int getExpirationDate()
{
return CallT<int>(base::CItem::getExpirationDate, this);
}
int getFootControlRateLimit()
{
return CallT<int>(base::CItem::getFootControlRateLimit, this);
}
int getItemGroupName()
{
return CallT<int>(base::CItem::getItemGroupName, this);
}
int getUsableLevel()
{
return CallT<int>(base::CItem::getUsableLevel, this);
}
int getUsablePeriod()
{
return CallT<int>(base::CItem::getUsablePeriod, this);
}
int get_gen_rate()
{
return CallT<int>(base::CItem::get_gen_rate, this);
}
int get_grade()
{
return CallT<int>(base::CItem::get_grade, this);
}
int get_index()
{
return CallT<int>(base::CItem::get_index, this);
}
int get_need_skill()
{
return CallT<int>(base::CItem::get_need_skill, this);
}
int get_price()
{
return CallT<int>(base::CItem::get_price, this);
}
int get_rarity()
{
return CallT<int>(base::CItem::get_rarity, this);
}
private:
};
class CStackableItem : public CItem
{
public:
//获取消耗品类型
int GetItemType()
{
typedef int (*__func)(void* a1);
return ((__func)base::CStackableItem::GetItemType)(this);
}
//获取徽章支持的镶嵌槽类型
int getJewelTargetSocket()
{
typedef int (*__func)(CStackableItem* a1);
return ((__func)base::CStackableItem::getJewelTargetSocket)(this);
}
};
class CEquipItem : public CItem
{
public:
int GetItemType()
{
return CallT<int>(base::CEquipItem::GetItemType, this);
}
};
class Inven_Item
{
public:
unsigned char package;
unsigned char UnknownData_NUSL[0x3C];
public:
//获取道具附加信息
WongWork::CAvatarItemMgr* get_add_info()
{
typedef WongWork::CAvatarItemMgr* (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::get_add_info)(this);
}
//检查背包中道具是否为空
bool isEmpty()
{
typedef bool (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::isEmpty)(this);
}
//获取背包中道具item_id
int getKey()
{
typedef int (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::getKey)(this);
}
//道具是否是装备
bool isEquipableItemType()
{
typedef bool (*__func)(Inven_Item* a1);
return ((__func)base::Inven_Item::isEquipableItemType)(this);
}
int get_ui_id()
{
return *(int*)(this + 0x7);
}
bool IsTradeLimitAttachTypeItem()
{
return CallT<bool>(base::Inven_Item::IsTradeLimitAttachTypeItem, this);
}
int GetItemSpace()
{
return CallT<int>(base::Inven_Item::GetItemSpace, this);
}
int SetReSealCount(uchar a2)
{
return CallT<int>(base::Inven_Item::SetReSealCount, this, a2);
}
int GetReSealCount()
{
return CallT<int>(base::Inven_Item::GetReSealCount, this);
}
};
class CDataManager
{
public:
static CDataManager* G_CDataManager(void)
{
typedef CDataManager* (*__func)(void);
return ((__func)base::CDataManager::G_CDataManager)();
}
//获取装备pvf数据
CItem* find_item(int a2)
{
typedef CItem* (*__func)(CDataManager* a1, int a2);
return ((__func)base::CDataManager::find_item)(this, a2);
}
};
class CInventory
{
public:
enum INVEN_TYPE : int
{
INVENTORY_TYPE_BODY = 0, //身上穿的装备
INVENTORY_TYPE_ITEM = 1, //物品栏
INVENTORY_TYPE_AVARTAR = 2, //时装栏
};
public:
//获取时装管理器
WongWork::CAvatarItemMgr* GetAvatarItemMgrR()
{
typedef WongWork::CAvatarItemMgr* (*__func)(void* a1);
return ((__func)base::CInventory::GetAvatarItemMgrR)(this);
}
int delete_item(INVEN_TYPE a2, int pos, int num, int a5, int a6 = 1)
{
typedef int (*__func)(CInventory* a1, INVEN_TYPE a2, int a3, int a4, int a5, int a6);
return ((__func)base::CInventory::delete_item)(this, a2, pos, num, a5, a6);
}
//使用金币
int use_money(int a2, int a3, char a4)
{
typedef int (*__func)(CInventory* a1, int a2, int a3, char a4);
return ((__func)base::CInventory::use_money)(this, a2, a3, a4);
}
//获得金币
int gain_money(unsigned int a2, int a3, char a4, int a5)
{
typedef int (*__func)(CInventory* a1, unsigned int a2, int a3, char a4, int a5);
return ((__func)base::CInventory::gain_money)(this, a2, a3, a4, a5);
}
//获取背包槽中的道具
Inven_Item* GetInvenRef(INVEN_TYPE a2, int a3)
{
typedef Inven_Item* (*__func)(CInventory* a1, INVEN_TYPE a2, int a3);
return ((__func)base::CInventory::GetInvenRef)(this, a2, a3);
}
Inven_Item* GetInvenSlot(Inven_Item* a2, INVEN_TYPE a3, int a4)
{
typedef Inven_Item* (__attribute__((__stdcall__))* fnCInventory_GetInvenSlot)(Inven_Item* dest, CInventory* pThis, int space, int location);
static fnCInventory_GetInvenSlot CInventory_GetInvenSlot = (fnCInventory_GetInvenSlot)(base::CInventory::GetInvenSlot);
return CInventory_GetInvenSlot(a2, this, a3, a4);
}
int update_item(INVEN_TYPE a2, int a3, Inven_Item a4)
{
return CallT<int>(base::CInventory::update_item, this, a2, a3, a4);
}
};
class DB_UpdateAvatarJewelSlot
{
public:
static int makeRequest(int a1, unsigned int a2, void* src)
{
typedef int (*__func)(int a1, unsigned int a2, void* src);
return ((__func)base::DB_UpdateAvatarJewelSlot::makeRequest)(a1, a2, src);
}
};
class PacketBuf
{
public:
unsigned char UnknownData_0000[0x20000];
public:
PacketBuf()
{
memset(UnknownData_0000, 0, sizeof(UnknownData_0000));
CallT<PacketBuf*>(base::PacketBuf::PacketBuf_make, this);
}
~PacketBuf()
{
CallT<int>(base::PacketBuf::PacketBuf_destroy, this);
}
static PacketBuf* NewPacketBuf()
{
void* v62 = malloc(0x20000);
if (!v62) return NULL;
return CallT<PacketBuf*>(base::PacketBuf::PacketBuf_make, v62);
}
static void DelPacketBuf(PacketBuf* a1)
{
CallT<int>(base::PacketBuf::PacketBuf_destroy, a1);
free(a1);
}
int bind_packet(char* a2, int a3)
{
return CallT<int>(base::PacketBuf::bind_packet, this, a2, a3);
}
//取大小
int get_len()
{
typedef int (*__func)(PacketBuf* a1);
return ((__func)base::PacketBuf::get_len)(this);
}
//取指针
int get_buf_ptr(int a2 = 0)
{
typedef int (*__func)(PacketBuf* a1, int a2);
return ((__func)base::PacketBuf::get_buf_ptr)(this, a2);
}
char get_byte()
{
char result;
typedef int (*__func)(PacketBuf* a1, char* a2);
if (((__func)base::PacketBuf::get_byte)(this, &result) == 1)
{
return result;
}
return 0;
}
short get_short()
{
short result;
typedef int (*__func)(PacketBuf* a1, short* a2);
if (((__func)base::PacketBuf::get_short)(this, &result) == 1)
{
return result;
}
return 0;
}
int get_int()
{
int result;
typedef int (*__func)(PacketBuf* a1, int* a2);
if (((__func)base::PacketBuf::get_int)(this, &result) == 1)
{
return result;
}
return 0;
}
int get_binary(char* a2, int a3)
{
typedef int (*__func)(PacketBuf* a1, char* a2, int a3);
return ((__func)base::PacketBuf::get_binary)(this, a2, a3);
}
void* copy(const PacketBuf* a2)
{
return CallT<void*>(base::PacketBuf::copy, this, a2);
}
};
class InterfacePacketBuf
{
public:
int put_header(int a2, int a3)
{
typedef int (*__func)(InterfacePacketBuf* a1, int a2, int a3);
return ((__func)base::InterfacePacketBuf::put_header)(this, a2, a3);
}
int put_byte(char a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, char a2);
return ((__func)base::InterfacePacketBuf::put_byte)(this, a2);
}
int put_short(short a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, short a2);
return ((__func)base::InterfacePacketBuf::put_short)(this, a2);
}
int put_int(int a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, int a2);
return ((__func)base::InterfacePacketBuf::put_int)(this, a2);
}
int put_binary(char* a2, int a3)
{
typedef int (*__func)(InterfacePacketBuf* a1, char* a2, int a3);
return ((__func)base::InterfacePacketBuf::put_binary)(this, a2, a3);
}
int finalize(bool a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, bool a2);
return ((__func)base::InterfacePacketBuf::finalize)(this, a2);
}
int put_str(const char* a2, int a3)
{
typedef int (*__func)(InterfacePacketBuf* a1, const char* a2, int a3);
return ((__func)base::InterfacePacketBuf::put_str)(this, a2, a3);
}
int put_packet(const Inven_Item* a2)
{
typedef int (*__func)(InterfacePacketBuf* a1, const Inven_Item* a2);
return ((__func)base::InterfacePacketBuf::put_packet)(this, a2);
}
};
class PacketGuard
{
public:
static PacketGuard* NewPacketGuard()
{
void* v62 = malloc(0x20000);
typedef int (*__func)(void* a1);
if (!v62) return NULL;
((__func)base::PacketGuard::PacketGuard_make)(v62);
return (PacketGuard*)v62;
}
static void DelPacketGuard(PacketGuard* a1)
{
typedef int (*__func)(void* a1);
((__func)base::PacketGuard::PacketGuard_destroy)(a1);
free(a1);
}
};
class PacketDispatcher
{
public:
int getDispatcher(int a2)
{
typedef int (*__func)(PacketDispatcher* a1, int a2);
return ((__func)base::PacketDispatcher::getDispatcher)(this, a2);
}
void** get_dispatcher(int a2)
{
typedef void** (*__func)(PacketDispatcher* a1, int a2);
return ((__func)base::PacketDispatcher::get_dispatcher)(this, a2);
}
};
class CSecu_ProtectionField
{
public:
static CSecu_ProtectionField* Get()
{
return (CSecu_ProtectionField*)(*(int*)base::GlobalData::s_pSecuProtectionField);
}
int Check(CUser* a2, int a3)
{
return CallT<int>(base::CSecu_ProtectionField::Check, this, a2, a3);
}
};
class stMoveItemParam
{
public:
static stMoveItemParam* NewstMoveItemParam()
{
void* v62 = malloc(0x20000);
if (!v62) return NULL;
CallT<int>(base::stMoveItemParam::stMoveItemParam_make, v62);
return (stMoveItemParam*)v62;
}
static void DelstMoveItemParam(stMoveItemParam* a1)
{
CallT<int>(base::stMoveItemParam::stMoveItemParam_destroy, a1);
free(a1);
}
static void DelstMoveItemParam2(stMoveItemParam* a1)
{
CallT<int>(base::stMoveItemParam::stMoveItemParam_del, a1);
}
};
class cUserHistoryLog
{
public:
};
class AvatarRechargeServer
{
public:
static AvatarRechargeServer* Get()
{
return CallT<AvatarRechargeServer*>(base::AvatarRechargeServer::Get);
}
char SendDurability(CUser* a2, char a3, short a4, char a5, int a6)
{
return CallT<char>(base::AvatarRechargeServer::SendDurability, this, a2, a3, a4, a5, a6);
}
};
class Dispatcher_ModItemAttr
{
public:
int _SendResult(CUser* a2, ushort a3, ushort a4, ushort a5)
{
return CallT<int>(base::Dispatcher_ModItemAttr::_SendResult, this, a2, a3, a4, a5);
}
};
#pragma pack(pop)
#endif // __DXFBASE_H__

View File

@ -8,7 +8,7 @@
#define SET_TEXTA(X) #X
namespace Util
namespace Utils
{
/**
* @brief 16Hex文本
@ -50,7 +50,7 @@ namespace Util
}
#define LOG(format,...) Util::_Log(format,##__VA_ARGS__)
#define LOG(format,...) Utils::_Log(format,##__VA_ARGS__)
#endif // utils_h__