Rindro-Sqr/Base/_Tool/Hacker_RegApi.nut

200 lines
6.3 KiB
Plaintext

/*
文件名:Hacker_RegApi.nut
路径:Base/_Tool/Hacker_RegApi.nut
创建日期:2024-09-25 18:31
文件用途:注册API
*/
//工具类
class R_Utils {
String = {
FindLastSubstring = function(str, substring) {
local strLen = str.len();
local subLen = substring.len();
local lastIndex = -1;
for (local i = 0; i <= strLen - subLen; i++) {
local found = true;
for (local j = 0; j< subLen; j++) {
if (str[i + j] != substring[j]) {
found = false;
break;
}
}
if (found) {
lastIndex = i;
}
}
return lastIndex;
}
}
//播放音效
function PlaySound(SoundName) {
L_Sq_CallFunc(0x75BD70, "void", FFI_MS_CDECL, ["pointer", "int", "int", "int"], Memory.allocUtf8String(SoundName).C_Object, -1, 0, 0);
}
//读取文件内容
function ReadScript(Path, Size, CodePage) {
local ReadPath = L_sq_P2I(Memory.allocUtf8String(Path).C_Object);
local Reader = Memory.alloc(Size);
local ReadBuffer = L_sq_P2I(Reader.C_Object);
L_Sq_CallFunc(0x11A2030, "int", FFI_FASTCALL, ["int", "int", "int", "int", "int", "int"], 0x1D17638, 0, ReadPath, ReadBuffer, 0x100000, 0x19DAF4);
if (CodePage == "utf8")
return Reader.readUtf8String();
if (CodePage == "unicode")
return Reader.readUnicodeString();
if (CodePage == "big5")
return Reader.readBig5String();
}
//读取文件
function GetScriptFileReader(Path, ...) {
local AllocSize = 102400;
if (vargc > 0) AllocSize = vargv[0];
//读取路径
local ReadPath = L_sq_P2I(Memory.allocUtf8String(Path).C_Object);
//读取缓存
local Reader = Memory.alloc(AllocSize);
local ReadBuffer = L_sq_P2I(Reader.C_Object);
//实际读取大小
local ReadSizeer = Memory.alloc(4);
local ReadSizeBuffer = L_sq_P2I(ReadSizeer.C_Object);
local Flag = L_Sq_CallFunc(0x59E3D0, "bool", FFI_MS_CDECL, ["int", "int", "int", "int"], ReadPath, ReadBuffer, AllocSize, ReadSizeBuffer);
if (Flag) {
return {
Buffer = Reader,
Size = ReadSizeer.readInt()
};
} else return null;
}
//读取配置表
function ReadScriptConfig(Path, Size, ...) {
local CodePage = "utf8";
if (vargc > 0) CodePage = vargv[0];
local Script = R_Utils.ReadScript(Path, Size, CodePage);
local Func = compilestring("return " + Script);
local Ret = Func();
return Ret;
}
//获取一个指定装备的角色对象
function GetCharacByEqu(Job, GrowType, Equ) {
local Obj = sq_CreateCharacter(Job, GrowType);
local ObjAddress = L_Sq_GetObjectAddress(Obj);
foreach(value in Equ) {
local ItemObject = L_sq_GetItem(value);
// L_Sq_CallFunc(0x825570, "void", FFI_THISCALL, ["int", "int"], ObjAddress, ItemObject);
L_Sq_CallFunc(0x8265A0, "void", FFI_THISCALL, ["int", "int", "int"], ObjAddress, ItemObject, -1);
}
return sq_GetCNRDObjectToSQRCharacter(Obj);
}
//获取装备编号的得文件路径
function GetEquPath(Equ) {
local EquPathAddress = L_Sq_CallFunc(0x1219E80, "int", FFI_THISCALL, ["int", "int"], 0x1d7993c, Equ);
if (EquPathAddress) {
return NativePointer(EquPathAddress).readUnicodeString();
}
return null;
}
}
//根据List读取文件地址
// Rindro_Haker.LoadHook(0x1219E80, ["int", "int", "int"],
// function(args) {
// // print(format("%02x", args[0]));
// // print(args[2]);
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// // local Path = NativePointer(L_sq_I2P(args.pop())).readUnicodeString();
// // if (Path != "character/swordman/weapon/katana/kat_lowkogaras.equ" && Path != "new_elvengard.twn") {
// // print(args[0]);
// // print(args[1]);
// // // print(format("%02x", args[1]));
// // print(Path);
// // }
// return null;
// });
//可能是构造装备以及构造其他东西
// Rindro_Haker.LoadHook(0x972220, ["int", "int", "int", "int"],
// function(args) {
// // print(format("%02x", args[0]));
// // local AniPath = NativePointer(L_sq_I2P(args[0])).readUnicodeString();
// if (args[0] == 10402) {
// print(args[0]);
// print(args[1]);
// print(args[2]);
// }
// // print(args[2]);
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
//绘制字符
getroottable().DrawCodeCallBackFunc <- {};
// Rindro_Haker.LoadHook(0x1206BD0, ["int", "int", "int", "pointer", "int", "void"],
// function(args) {
// // print("nut:" + format("%02x", args[3]));
// if (args[3]) {
// local DrawCode = NativePointer((args[3])).readUnicodeString();
// // print(DrawCode);
// if (DrawCode in DrawCodeCallBackFunc)
// DrawCodeCallBackFunc[DrawCode](args);
// // print(args[3]);
// }
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
//绘制城镇回调
getroottable().DrawTownCallBackFunc <- {};
Rindro_Haker.LoadHook(0x1108700, ["int", "void"],
function(args) {
// print("nut:" + format("%02x", args[3]));
// print(format("%02x", args[0]));
foreach(Func in DrawTownCallBackFunc) {
Func();
}
return null;
},
function(args) {
// print(666);
// print(format("%02x", args.pop()));
// TTTAni <- args.pop();
return null;
});
//顺图
function Rindro_Gm_MoveMap()
{
}
getroottable()["LenheartFuncTab"].rawset("Rindro_Gm_MoveMapFuncN", Rindro_Gm_MoveMap);