更新内存写方法

This commit is contained in:
lenheart
2025-12-02 20:42:06 +08:00
parent 0d0f7a0958
commit f8eeb2e0cf
9 changed files with 515 additions and 279 deletions

View File

@@ -23,36 +23,145 @@ Gm_InputFunc_Handle["给"] <- function(SUser, CmdString) {
}
// Timer.SetTimeOut(function() {
// Haker.LoadHook("0x0830ADF6", ["pointer", "pointer", "pointer", "pointer", "int", "int", "int", "int", "int", "pointer", "float", "int", "void"],
// function(args) {
// local SParty = Party(NativePointer(args[0]).readPointer());
// local map_monster_param = NativePointer(Haker.CpuContext.ebp).add(0x10).readPointer();
// local monster_uid = NativePointer(NativePointer(Haker.CpuContext.ebp).add(0x18).readPointer()).readU16();
// SParty.ForeachMember(function(SUser, Index) {
// local user_item_list = Memory.alloc(8);
// Sq_CallFunc(S_Ptr("0x08152A2C"), "pointer", ["pointer"], user_item_list.C_Object);
// Sq_CallFunc(S_Ptr("0x0830ADF6"), "void", ["pointer", "pointer", "pointer", "pointer", "int", "int", "int", "int", "int", "pointer", "float", "int"], args[0], user_item_list.C_Object, args[2], args[3], Index + 1, 1, args[6], args[7], args[8], args[9], args[10], args[11]);
// api_copy_mapinfo_items_between_lists(NativePointer(args[1]), user_item_list);
// local Pack = Packet();
// Sq_CallFunc(S_Ptr("0x0830B8CC"), "pointer", ["pointer", "pointer", "pointer", "int", "int", "pointer", "pointer"], args[0], Pack.C_Object, user_item_list.C_Object, monster_uid, Index + 1, args[3], map_monster_param);
// SUser.Send(Pack);
// Pack.Delete();
// Sq_CallFunc(S_Ptr("0x08151F6E"), "pointer", ["pointer"], user_item_list.C_Object);
// });
// //跳过原逻辑
// Sq_WriteByteArr(S_Ptr("0x830ADFC"), Haker.AsmGenerateMcd(
// "pop ebx",
// "pop esi",
// "pop edi",
// "pop ebp",
// "ret"));
// return null;
// },
// function(args) {
// //还原
// Sq_WriteByteArr(S_Ptr("0x830ADFC"), [0x81, 0xec, 0x7c, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x18]);
// return null;
// });
// //跳过原本的怪物死亡掉落包构造
// Haker.LoadHook("0x0830B8CC", ["pointer", "pointer", "pointer", "int", "int", "pointer", "pointer", "pointer"],
// function(args) {
// if (Haker.NextReturnAddress == "0x830CE08") {
// print(12313);
// local v109 = NativePointer(NativePointer(Haker.CpuContext.ebp).sub(0x90).readPointer());
// local v106 = NativePointer(Haker.CpuContext.ebp).sub(0x96)
// if (v109.add(44).readU32() == 100 && v106.readU8() != 1 && NativePointer(args[0]).add(109 * 4).readU32() != 1) {
// //跳过原逻辑
// Sq_WriteByteArr(S_Ptr("0x830B8D3"), Haker.AsmGenerateMcd(
// "add esp , 64",
// "pop ebx",
// "pop ebp",
// "ret"));
// }
// }
// return null;
// },
// function(args) {
// if (Haker.NextReturnAddress == "0x830CE08") {
// local v109 = NativePointer(NativePointer(Haker.CpuContext.ebp).sub(0x90).readPointer());
// local v106 = NativePointer(Haker.CpuContext.ebp).sub(0x96)
// if (v109.add(44).readU32() == 100 && v106.readU8() != 1 && NativePointer(args[0]).add(109 * 4).readU32() != 1) {
// Sq_WriteByteArr(S_Ptr("0x830B8D3"), [0x8B, 0x45, 0x18, 0x66, 0x89, 0x45, 0xB4, 0x8B, 0x45, 0x0C]);
// return 1;
// }
// }
// return null;
// });
// //跳过原本的怪物死亡掉落包队伍发包
// Haker.LoadHook("0x0859d14e", ["pointer", "pointer", "int"],
// function(args) {
// if (Haker.NextReturnAddress == "0x85a39db" && Sq_CallFunc(S_Ptr("0x0848F438"), "int", ["pointer"], args[1]) == 0) {
// //跳过原逻辑
// Sq_WriteByteArr(S_Ptr("0x859D154"), Haker.AsmGenerateMcd(
// "add esp , 28",
// "pop ebp",
// "ret"));
// }
// return null;
// },
// function(args) {
// if (Haker.NextReturnAddress == "0x85a39db" && Sq_CallFunc(S_Ptr("0x0848F438"), "int", ["pointer"], args[1]) == 0) {
// Sq_WriteByteArr(S_Ptr("0x859D154"), [0xC7, 0x45, 0xF4, 0x00, 0x00, 0x00, 0x00]);
// return 0;
// }
// return null;
// });
// //DisPatcher_GetItem::check_error 校验用户是否非法捡取物品
// Haker.LoadHook("0x081C35AC", ["int"],
// function(args) {
// return null;
// },
// function(args) {
// local user = NativePointer(Haker.CpuContext.ebp).add(0xc).readPointer();
// local msg_base = NativePointer(Haker.CpuContext.ebp).add(0x10).readPointer();
// local drop_id = NativePointer(msg_base).add(13).readU16();
// local res = validate_pickup_permission(user, drop_id);
// return res;
// });
// //跳过物品掷点
// Haker.LoadHook("0x0850D756", ["pointer", "bool"],
// function(args) {
// return null;
// },
// function(args) {
// return false;
// });
// //取消队友分金币
// Haker.LoadHook("0x0859A918", ["pointer", "int"],
// function(args) {
// return null;
// },
// function(args) {
// return 1;
// });
Timer.SetTimeOut(function() {
// //SS免确认
// Sq_WriteByteArr(S_Ptr("0x085A56D0"), [9]);
// Haker.LoadHook("0x08150f18", ["pointer", "int"],
// function(args) {
// return null;
// },
// function(args) {
// return 0;
// });
Haker.LoadHook("0x0830ADF6", ["pointer", "pointer", "pointer", "pointer", "int", "int", "int", "int", "int", "pointer", "float", "int", "void"],
function(args) {
local SParty = Party(NativePointer(args[0]).readPointer());
local map_monster_param = NativePointer(Haker.CpuContext.ebp).add(0x10).readPointer();
local monster_uid = NativePointer(NativePointer(Haker.CpuContext.ebp).add(0x18).readPointer()).readU16();
Sq_WriteByteArr(S_Ptr("0x830ADFB"), Haker.AsmGenerateMcd(
"pop esi",
"pop edi",
"pop ebp",
"ret"));
return null;
},
function(args) {
//还原
Sq_WriteByteArr(S_Ptr("0x830ADFB"), [0x53, 0x81, 0xec, 0x7c, 0x01]);
return null;
});
}, 1)
// Sq_WriteByteArr(S_Ptr("0x085A41D1"), [0xB8, 0x00, 0x00, 0x00, 0x00, 0x90]);
// }, 1)
Timer.SetTimeOut(function ()
{
// dofile("/dp_s/_DPS_/_BuiltProject/宿命魂石/FatalismStone.nut");
// ProjectInitFuncMap.P_FatalismStone <- FatalismStone();
Timer.SetTimeOut(function() {
local Config = sq_ReadJsonFile("/dp_s/OfficialConfig" + "/" + "门票进入副本配置_Maomi.json");
// local Config = GlobalConfig.Get("门票进入副本配置_Maomi.json");
print(Config);
}, 1);

View File

@@ -1,54 +0,0 @@
/*
文件名:史诗药剂.nut
路径:MyProject/史诗药剂.nut
创建日期:2025-03-28 10:21
文件用途:史诗药剂
*/
//➢SS药剂的ID
EpicPotionID <- 2600006;
//➢默认的药剂增加倍率
EpicPotionOdds <- 0.1;
//➢指定玩家增加深渊爆率
EpicPotionlist <- {};
//角色ID增加个人深渊爆率
EpicPotionlist[1] <- 1;
Cb_GetItemRarity_Enter_Func["史诗药剂_逻辑"] <- function(args) {
local Addr = NativePointer(args[0]);
local VectorSize = (Addr.add(4).readU32() - Addr.readU32()) / 4;
// 遍历队伍成员,找到使用了史诗药剂的玩家
local userWithPotion = null;
for (local i = 0; i< VectorSize; i++) {
local elementAddr = NativePointer(Addr.readPointer()).add(i * 4);
local user = elementAddr.readPointer();
if (user && Sq_CallFunc(S_Ptr("0x865E994"), "int", ["pointer", "int", ], user, EpicPotionID) ) {
userWithPotion = User(user);
break;
}
}
if (userWithPotion && Haker.NextReturnAddress == "0x853583a") {
local partyobj = userWithPotion.GetParty();
// 检查是否单人
if (Sq_CallFunc(S_Ptr("0x0859A16A"), "int", ["pointer"], partyobj.C_Object) == 1) {
local MaxRoll = NativePointer(args[1]).add(16).readU32();
local odds = EpicPotionOdds; // 默认药剂的增加几率
// 检查是否VIP玩家
local charac_no = userWithPotion.GetCID();
if (EpicPotionlist.rawin(charac_no)) {
odds = EpicPotionlist[charac_no];
}
// 计算新的roll值
args[2] = MathClass.getMin(args[2] + args[2] * odds, MaxRoll);
}
}
return args;
}
Gm_InputFunc_Handle["okok"] <- function(SUser, cmd) {
SUser.SendNotiPacketMessage("出纳上asdasdasda到几点方柏霓撒娇扩大年级卡萨", 7);
}