问题1:带有镶嵌的装备,强化或增幅后,镶嵌信息会消失,需要重选角色或者整理背包才恢复
解决办法如下:
检查你的frida里是否有针对80FC850地址的修改,如果有!!!!!!删掉!!!!!!
问题2:其他fr功能用了背包刷新函数,导致镶嵌信息消失,需要重选角色或者整理背包才恢复
解决办法如下:
把下面这个函数放你frida的js文件里,在你出问题的fr功能那,找到调用CUser_SendUpdateItemList的地方,把它换成CUser_SendUpdateEqu_JewelSocket记得对上参数
//道具是否是装备
var Inven_Item_isEquipableItemType = new NativeFunction(ptr(0x08150812), ‘int’, [‘pointer’], {“abi”:”sysv”});
/**
* 带镶嵌数据刷新槽位 刷新方式默认为1,仅客户端,当itemSpace!=0或3 或者不是装备时调用原刷新函数
* @param CUser
* @param itemSpace [装备=0, 时装=1, 身上=3]
* @param Slot 槽位
* @returns
*/
function CUser_SendUpdateEqu_JewelSocket(CUser, itemSpace, Slot) {
if (itemSpace == 0 || itemSpace == 3) {//是装备背包
if (mysql_frida != null) {
var equipment = CInventory_GetInvenRef(v4, 1, Slot);//获取物品栏背包格子数据
if(!Inven_Item_isEquipableItemType(equipment))//如果不是装备 则直接用原函数刷新
{
CUser_SendUpdateItemList(CUser, 1, itemSpace, Slot);
return;
}
var id = equipment.add(25).readU32();
var JewelSocketData = Memory.alloc(30);//空字节数据
JewelSocketData = api_get_jewel_socket_data(mysql_frida, id)//取出原有的孔位以及徽章数据
if (JewelSocketData.isNull()) {//如果没有镶嵌数据则用原函数刷新
CUser_SendUpdateItemList(CUser, 1, itemSpace, Slot);
return;
}
var v10 = api_PacketGuard_PacketGuard();
InterfacePacketBuf_put_header(v10, 0, 14);
InterfacePacketBuf_put_byte(v10, 0);
InterfacePacketBuf_put_short(v10, 1);
var v4 = CUserCharacInfo_getCurCharacInvenW(CUser);
CInventory_MakeItemPacket(v4, 1, Slot, v10);
InterfacePacketBuf_put_binary(v10, JewelSocketData, 30);
InterfacePacketBuf_finalize(v10, 1);
CUser_Send(CUser, v10);
Destroy_PacketGuard_PacketGuard(v10);
}
else{
CUser_SendUpdateItemList(CUser, 1, itemSpace, Slot);
}
}
else{
CUser_SendUpdateItemList(CUser, 1, itemSpace, Slot);
}
}
暂无评论内容