|
|
我发现服务端自带的JS已经有宠物附魔的代码了
function creatureEnchant(){
/*
需要在taiwan_cain_2nd创建一个表
CREATE TABLE `creature_items_enchant` (`ui_id` int(11) NOT NULL DEFAULT '0',`charac_no` int(11) DEFAULT NULL,`card` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`ui_id`) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
var CStackableItem_GetMonsterCardId = new NativeFunction(ptr(0x0849F530), 'int', ['pointer'],{"abi": "sysv"});
var expert_job_CExpertJobMgr_OnEnchantByBead = new NativeFunction(ptr(0x0849ED1A), 'int', ['pointer', 'pointer', 'int','int','int','int'], { "abi": "sysv" });
Interceptor.replace(ptr(0x0849ED1A), new NativeCallback(function(a1,a2,a3,a4,a5,a6){
// 原有宠物附魔逻辑
if(a6 > 56){
var inven = CUserCharacInfo_getCurCharacInvenW(a2);
var card_id = CStackableItem_GetMonsterCardId(CDataManager_find_item(G_CDataManager(),CInventory_GetInvenRef(inven,1,a4).add(2).readU32()))
var a7 = a6 - 57;
var equ = CInventory_GetInvenRef(inven,3,a7)//获取被操作装备指针
var equID = Inven_Item_getKey(equ);//获取被附魔装备代码
var equData = CDataManager_find_item(G_CDataManager(), equID);//获取被附魔装备指针
var equ_bw = CEquipItem_GetItemType(equData);//获取被操作装备部位
var itemData = CDataManager_find_item(G_CDataManager(), card_id);//获取卡片指针
var equ_bs = CStackableItem_getUsableItemType(itemData,equ_bw);//判断卡片和被操作装备部位是否匹配
if (equ_bs === 0) {
send_windows_pack_233(a2, "附魔错误");
return 0;
}
equ.add(13).writeU32(card_id);
CUser_SendUpdateItemList(a2, 1, 7, a7);
CInventory_delete_item(inven,1,a4,1,5,1);
CUser_SendUpdateItemList(a2, 1, 0, a4);
if(a7 < 140){
var ui_id = equ.add(7).readInt()
if (api_MySQL_exec(mysql_frida, "select card from `taiwan_cain_2nd`.`creature_items_enchant` where ui_id = " + ui_id + ";")){
if(MySQL_get_n_rows(mysql_frida)){
api_MySQL_exec(mysql_frida, "update `taiwan_cain_2nd`.`creature_items_enchant` set `card` = '" + card_id + "' where `ui_id` = " + ui_id + ";");
}else{
var charac_no = CUserCharacInfo_getCurCharacNo(a2);//获取角色uid
api_MySQL_exec(mysql_frida, "INSERT INTO `taiwan_cain_2nd`.`creature_items_enchant`(`ui_id`, `charac_no`, `card`) VALUES (" + ui_id + "," + charac_no + "," + card_id + ");");
}
}
}
var packet_guard = api_PacketGuard_PacketGuard();
InterfacePacketBuf_put_header(packet_guard, 1,275);
InterfacePacketBuf_put_byte(packet_guard, 1);
InterfacePacketBuf_finalize(packet_guard, 1);
CUser_Send(a2,packet_guard);
Destroy_PacketGuard_PacketGuard(packet_guard);
return 0
}else{
expert_job_CExpertJobMgr_OnEnchantByBead(a1,a2,a3,a4,a5,a6)
return 0
}
}, 'int', ['pointer', 'pointer', 'int', 'int', 'int', 'int']));
Interceptor.attach(ptr(0x86C4E50),{//选择角色处理函数 Hook GameWorld::reach_game_world 如果有这个,请加到自己的里面
onEnter: function(args) {
this.user = args[1];
},
onLeave: function(retval) {
var charac_no = CUserCharacInfo_getCurCharacNo(this.user);
if (api_MySQL_exec(mysql_frida, "select ui_id,card from `taiwan_cain_2nd`.`creature_items_enchant` where charac_no = " + charac_no + ";")){
var row = MySQL_get_n_rows(mysql_frida)
if(row){
var ui_id = []
var card = []
for(var i = 0;i < row;i++){
MySQL_fetch(mysql_frida);
ui_id.push(api_MySQL_get_int(mysql_frida,0))
card.push(api_MySQL_get_int(mysql_frida,1))
}
var inven = CUserCharacInfo_getCurCharacInvenW(this.user);
for(var i = 0;i < 141;i++){
if(i == 140){
var equ = CInventory_GetInvenRef(inven, 0, 22); //获取当前格子的宠物
}else{
var equ = CInventory_GetInvenRef(inven, 3, i);
}
var equ_id = equ.add(7).readInt();
var index = ui_id.indexOf(equ_id)
if(index > -1){
equ.add(13).writeU32(card[index])
if(i == 140){
CUser_SendUpdateItemList(this.user, 1, 0, 22);
}else{
CUser_SendUpdateItemList(this.user, 1, 7, i);
}
}
}
}
}
}
});
}
为啥附魔不了呢 |
|