This commit is contained in:
2024-09-27 14:04:23 +08:00
parent 39d60b284e
commit b2133d8463
25 changed files with 1170 additions and 128 deletions

View File

@@ -10,7 +10,7 @@ function L_HUD_BloodBackground() {
if (!obj) return;
if (RootTab.rawin("HudUi_Obj")) {
RootTab.HudUi_Obj.BottomShow(obj);
}
}
if (RootTab.rawin("EventList_Obj")) {
foreach(win in EventList_Obj.Events) {
win.EventShow(obj);

View File

@@ -100,6 +100,7 @@ function L_drawMainCustomUI_All() {
//初始化Item信息
if (!getroottable().rawin("RINDRO_GET_ITEM_FLAG")) {
RINDRO_CONFIG <- Rindro_GetLocalConfig();
getroottable().RINDRO_GET_ITEM_FLAG <- true;
Rindro_BaseToolClass.SendPackEx({
op = 20069005,
@@ -160,3 +161,7 @@ function L_drawMainCustomUI_All() {
// }
}
// getroottable().Lsnzz <- Clock();
// dofile("sqr/Base/_Tool/Json.nut");
// print(T);

View File

@@ -0,0 +1,52 @@
/*
文件名:Lenheart_Cursor_Class.nut
路径:Base/UI/Lenheart_Cursor_Class.nut
创建日期:2024-09-25 19:23
文件用途:鼠标绘制逻辑
*/
class Rindro_Cursor {
UseState = 0;
TypeState = 0;
SubState = 0;
constructor() {
}
function Proc(Xpos, Ypos) {
//使用自建的鼠标绘制函数
if (UseState) {
//工作类型为0
if (TypeState == 0) {
//常规状态
if (SubState == 0) {
L_sq_DrawImg("interface/newstyle/windows/cursor.img", 0, Xpos, Ypos);
}
//按下状态
else if (SubState == 1) {
L_sq_DrawImg("interface/newstyle/windows/cursor.img", 1, Xpos, Ypos);
}
} else {
L_sq_DrawImg("interface/newstyle/windows/cursor.img", TypeState, Xpos, Ypos);
}
}
}
function Sync(Xpos, Ypos) {
Proc(Xpos, Ypos);
return UseState;
}
}
_Rindro_Cusor_ <- Rindro_Cursor();
function SyncRindro_Cursor(Xpos, Ypos) {
if (getroottable().rawin("_Rindro_Cusor_")) {
local Ret = _Rindro_Cusor_.Sync(Xpos, Ypos);
return Ret;
}
return false;
}

View File

@@ -168,6 +168,8 @@ class Rindro_EventList {
x = X - 456,
y = Y
};
L_sq_RefreshEventIcon();
}
constructor() {

View File

@@ -21,26 +21,32 @@ class R_Mouse {
}
//锁定鼠标
function Lock() {
_Rindro_Cusor_.UseState = 1;
L_sq_WAB(0x1B46886, 1);
}
//解锁鼠标
function UnLock() {
_Rindro_Cusor_.UseState = 0;
L_sq_WAB(0x1B46886, 0);
}
//获取鼠标工作类型
function GetType() {
return _Rindro_Cusor_.TypeState;
// return L_sq_RAB(0x1b46898);
}
//设置鼠标工作类型
function SetType(Type) {
_Rindro_Cusor_.TypeState = Type;
// L_sq_WAB(0x1b46898, Type);
}
//鼠标0状态下是否按下
function GetBaseState() {
return _Rindro_Cusor_.SubState;
// return L_sq_RAB(0x1B46874);
}
//鼠标0状态设置是否按下
function SetBaseState(Flag) {
_Rindro_Cusor_.SubState = Flag;
// return L_sq_WAB(0x1B46874, Flag);
}
@@ -51,7 +57,7 @@ class R_Mouse {
//如果鼠标工作类型不是0则设置为0
if (R_Mouse.GetType() != 0) R_Mouse.SetType(0);
//如果鼠标是按下状态则设置为未按下
// if (R_Mouse.GetBaseState() != 0) R_Mouse.SetBaseState(0);
if (R_Mouse.GetBaseState() != 0) R_Mouse.SetBaseState(0);
}
}
//基础窗口类 所有UI类继承与本类
@@ -254,54 +260,46 @@ class LenheartNewUI_Windows extends LenheartNewUI_BaseWindow {
// L_sq_MouseClick();
}
//道具信息窗口地址
ItemInfoDrawS = null;
//绘制道具相信信息
ItemObject = null;
//获取道具信息并生成缓存
function GetItemInfo(Id) {
if (!Rindro_ItemInfoObject.rawin(Id)) {
local ItemObject = L_sq_GetItem(Id);
if (!ItemObject) ItemObject = L_sq_GetItem(3037);
Rindro_ItemInfoObject.rawset(Id, ItemObject);
}
}
//绘制道具带道具信息 带道具边框
function DrawItemEx(X, Y, Id, Count) {
if (!Rindro_ItemInfoObject.rawin(Id)) Id = 3037;
if (Id != -1) {
local Rarity = Rindro_ItemInfoObject[Id].Rarity ? Rindro_ItemInfoObject[Id].Rarity : 0;
L_sq_DrawImg("interface2/rindro_reward.img", Rarity, X - 3, Y - 3);
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
ItemInfoDrawS = {};
ItemInfoDrawS.X <- X;
ItemInfoDrawS.Y <- Y;
ItemInfoDrawS.ItemId <- Id;
}
}
GetItemInfo(Id);
local Rarity = L_sq_RA(Rindro_ItemInfoObject[Id] + 0xF4);
L_sq_DrawImg("interface2/rindro_reward.img", Rarity, X - 3, Y - 3);
DrawItemBase(X, Y, Id, Count);
}
//绘制道具带道具信息
function DrawItemBase(X, Y, Id, Count) {
if (!Rindro_ItemInfoObject.rawin(Id)) Id = 3037;
if (Id != -1) {
local Rarity = Rindro_ItemInfoObject[Id].Rarity ? Rindro_ItemInfoObject[Id].Rarity : 0;
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
ItemInfoDrawS = {};
ItemInfoDrawS.X <- X;
ItemInfoDrawS.Y <- Y;
ItemInfoDrawS.ItemId <- Id;
GetItemInfo(Id);
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
//打开道具信息窗口
if (!ItemInfoDrawS) {
ItemInfoDrawS = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Rindro_ItemInfoObject[Id], 41);
//校准道具信息窗口位置
L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], ItemInfoDrawS, IMouse.GetXPos(), IMouse.GetYPos(), 28, 28);
}
}
}
//绘制悬停
function DrawItemInfo() {
if (ItemInfoDrawS) {
if (!ItemObject) {
local ItemId = ItemInfoDrawS.ItemId;
if (Rindro_ItemInfoObject.rawin(ItemId)) {
ItemObject = ItemInfoClass(Rindro_ItemInfoObject[ItemId]);
}
}
ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength);
} else {
ItemObject = null;
if (ItemInfoDrawS) {
L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0);
ItemInfoDrawS = null;
}
}
}
//生成DT
function GenerateDt() {
try {
@@ -321,10 +319,8 @@ class LenheartNewUI_Windows extends LenheartNewUI_BaseWindow {
LenheartNewUI_BaseWindow.Show(obj);
if (DeBugMode) DeBug(obj);
DrawItemInfo();
//初始化绘制道具
ItemInfoDrawS = null;
// ItemInfoDrawS = null;
}
function TopShow(obj) {
@@ -686,6 +682,7 @@ class LenheartNewUI_CommonUi extends LenheartNewUI_BaseWindow {
isInRect = false;
OnClick = null;
OnClickSound = null;
ObjectId = null;
Visible = true;
@@ -714,13 +711,18 @@ class LenheartNewUI_CommonUi extends LenheartNewUI_BaseWindow {
}
//鼠标左键按下回调
function OnMouseLbDown(MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) isLBDown = true;
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) {
isLBDown = true;
if (!OnClickSound) {
R_Utils.PlaySound("CLICK_BUTTON1");
} else {
R_Utils.PlaySound(OnClickSound);
}
}
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
if (isLBDown && OnClick) {
local obj = sq_getMyCharacter();
obj.sq_PlaySound("CLICK_BUTTON1");
OnClick();
}
isLBDown = false;
@@ -922,6 +924,10 @@ class LenheartNewUI_BaseInput extends LenheartNewUI_CommonUi {
}
}
}
function SetStr(Value) {
L_sq_SetInputBoxStr(InputController, Value);
}
}
//复选框

View File

@@ -0,0 +1,30 @@
/*
文件名:Hacker_Class.nut
路径:Base/_Tool/Hacker_Class.nut
创建日期:2024-09-24 06:25
文件用途:
*/
class _Rindro_Hacker {
HookTable = null;
constructor() {
HookTable = {};
}
function UnLoadHook(AddressStr) {
Sq_DeHookFunc(HookTable[AddressStr]);
}
function LoadHook(AddressStr, ArgumentArr, EnterFunc, LeaveFunc) {
//如果已经HOOK过 需要先卸载原来的HOOK
if (HookTable.rawin(AddressStr)) {
UnLoadHook(AddressStr);
print("地址: " + AddressStr + " 已经装载了Hook,本次操作将会卸载之前的Hook在执行。")
}
local Controler = Sq_HookFunc(AddressStr, ArgumentArr, EnterFunc, LeaveFunc);
HookTable.rawset(AddressStr, Controler);
}
}
//初始化Hacker
Rindro_Haker <- _Rindro_Hacker();

View File

@@ -0,0 +1,42 @@
/*
文件名:Hacker_RegApi.nut
路径:Base/_Tool/Hacker_RegApi.nut
创建日期:2024-09-25 18:31
文件用途:注册API
*/
//工具类
class R_Utils {
//播放音效
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 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;
}
}

201
Base/_Tool/MemoryClass.nut Normal file
View File

@@ -0,0 +1,201 @@
/*
文件名:MemoryClass.nut
路径:Base/_Tool/MemoryClass.nut
创建日期:2024-09-24 08:22
文件用途:
*/
class Memory {
function alloc(Size) {
return NativePointer(Size);
}
function allocUtf8String(Str) {
return NativePointer(Str_Ptr(Str));
}
}
class NativePointer {
C_Object = null;
constructor(T) {
if (type(T) == "integer") {
C_Object = Sq_New_Point(T);
//注册销毁伪析构
Register_Destruction(C_Object, this);
} else if (type(T) == "userdata") {
C_Object = T;
}
}
function add(intoffset) {
this.C_Object = L_sq_I2P(L_sq_P2I(this.C_Object) + intoffset);
return this;
}
function sub(intoffset) {
this.C_Object = L_sq_I2P(L_sq_P2I(this.C_Object) - intoffset);
return this;
}
function writeByteArray(arr) {
Sq_Memory_WriteByteArr(this.C_Object, arr);
}
function readByteArray(size) {
local PointB = Sq_Point2Blob(this.C_Object, size);
local arr = [];
foreach(value in PointB) {
arr.append(value);
}
return arr;
}
function write(value, type) {
local Buf = blob(0);
Buf.writen(value, type);
local arr = [];
foreach(value in Buf) {
arr.append(value);
}
writeByteArray(arr);
}
function writeS8(value) {
write(value, 'c');
}
function writeU8(value) {
write(value, 'b');
}
function writeS16(value) {
write(value, 's');
}
function writeU16(value) {
write(value, 'w');
}
function writeS32(value) {
write(value, 'i');
}
function writeU32(value) {
write(value, 'i');
}
function writeShort(value) {
write(value, 's');
}
function writeUShort(value) {
write(value, 'w');
}
function writeInt(value) {
write(value, 'i');
}
function writeUInt(value) {
write(value, 'i');
}
function writeFloat(value) {
write(value, 'f');
}
function writeDouble(value) {
write(value, 'd');
}
function read(type) {
local Buf = Sq_Point2Blob(this.C_Object, 4);
return Buf.readn(type);
}
function readS8() {
return read('c');
}
function readU8() {
return read('b');
}
function readS16() {
return read('s');
}
function readU16() {
return read('w');
}
function readS32() {
return read('i');
}
function readU32() {
return read('i');
}
function readShort() {
return read('s');
}
function readUShort() {
return read('w');
}
function readInt() {
return read('i');
}
function readUInt() {
return read('i');
}
function readFloat() {
return read('f');
}
function readDouble() {
return read('d');
}
function readUnicodeString(...) {
if (vargc > 0) {
return Sq_Memory_ReadString(this.C_Object, vargv[0]);
} else {
return Sq_Memory_ReadString(this.C_Object);
}
}
function readUtf8String(...) {
if (vargc > 0) {
return Sq_Memory_ReadStringByUtf8(this.C_Object, vargv[0]);
} else {
return Sq_Memory_ReadStringByUtf8(this.C_Object);
}
}
function readBig5String(...) {
if (vargc > 0) {
return Sq_Memory_ReadStringByBig5(this.C_Object, vargv[0]);
} else {
return Sq_Memory_ReadStringByBig5(this.C_Object);
}
}
function readPointer() {
return Sq_ReadPoint(this.C_Object);
}
function tostring() {
return this.C_Object.tostring();
}
}

View File

@@ -6,56 +6,54 @@
*/
if (!getroottable().rawin("Rindro_ItemInfoObject")) Rindro_ItemInfoObject <- {};
if (!getroottable().rawin("Rindro_ItemInfoBuf")) Rindro_ItemInfoBuf <- "";
if (!getroottable().rawin("RINDRO_INIT_FLAG")) RINDRO_INIT_FLAG <- false;
if (!getroottable().rawin("RINDRO_INIT_FLAG")) RINDRO_INIT_FLAG <- true;
//获取本地配置
function Rindro_GetLocalConfig() {
local Buf = L_sq_GetLocalConfig();
if (!Buf) {
return {
md5 = -1
};
} else return Json.Decode(Buf);
// local Buf = L_sq_GetLocalConfig();
// if (!Buf) {
// return {
// md5 = -1
// };
// } else return dofile("Rindro_Config.cfg");
}
// if (!getroottable().rawin("RINDRO_CONFIG"))
RINDRO_CONFIG <- Rindro_GetLocalConfig();
//获取本地信息版本
function Rindro_GetMd5() {
return RINDRO_CONFIG.md5;
// return RINDRO_CONFIG.md5;
return -1;
}
//初始化各种信息
function Rindro_Init() {
//道具信息
local ItemArray = getroottable().RINDRO_CONFIG.itemInfo;
Rindro_ItemInfoBuf = "";
foreach(Value in ItemArray) {
if (Value.Name2.len() == 0)
Value.Name2 = "Rindro-Team";
getroottable().Rindro_ItemInfoObject[Value.Id] <- Value;
}
RINDRO_INIT_FLAG = true;
// //道具信息
// local ItemArray = getroottable().RINDRO_CONFIG.itemInfo;
// Rindro_ItemInfoBuf = "";
// foreach(Value in ItemArray) {
// if (Value.Name2.len() == 0)
// Value.Name2 = "Rindro-Team";
// getroottable().Rindro_ItemInfoObject[Value.Id] <- Value;
// }
// RINDRO_INIT_FLAG = true;
}
//更新本地配置
function Rindro_ItemInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
if ("ZipSEnd" in Jso) {
getroottable().Rindro_ItemInfoObject <- {};
Rindro_ItemInfoBuf += Jso.ZipS;
local ZlibStrBuf = L_sq_Dezlib(Rindro_ItemInfoBuf);
if (ZlibStrBuf == "null") {
Rindro_ItemInfoBuf = "";
return;
}
L_sq_SetLocalConfig(ZlibStrBuf);
getroottable().RINDRO_CONFIG <- Json.Decode(ZlibStrBuf);
Rindro_Init();
} else {
Rindro_ItemInfoBuf += Jso.ZipS;
}
// local Jso = Json.Decode(Chunk);
// if ("ZipSEnd" in Jso) {
// getroottable().Rindro_ItemInfoObject <- {};
// Rindro_ItemInfoBuf += Jso.ZipS;
// local ZlibStrBuf = L_sq_Dezlib(Rindro_ItemInfoBuf);
// if (ZlibStrBuf == "null") {
// Rindro_ItemInfoBuf = "";
// return;
// }
// ZlibStrBuf = L_sq_DecondeJson(ZlibStrBuf);
// L_sq_SetLocalConfig("return " + ZlibStrBuf);
// getroottable().RINDRO_CONFIG <- dofile("Rindro_Config.cfg");
// Rindro_Init();
// } else {
// Rindro_ItemInfoBuf += Jso.ZipS;
// }
}
Pack_Control.rawset(20240422, Rindro_ItemInfoCallBack);
//无需更新本地配置
@@ -299,4 +297,110 @@ class ItemInfoClass {
}
}
}
}
}
// local ReadPath = L_sq_P2I(Memory.allocUtf8String("etc/rindro/horseguessing/horseguessing.dat").C_Object);
// print(format("%02x", ReadPath));
// local Reader = Memory.alloc(1024);
// local ReadBuffer = L_sq_P2I(Reader.C_Object);
// print(format("%02x", ReadBuffer));
// L_Sq_CallFunc(0x11A2030, "int", FFI_FASTCALL, ["int", "int", "int", "int", "int", "int"], 0x1D17638, 0, ReadPath, ReadBuffer, 0x100000, 0x19DAF4);
// // print(Reader.readUtf8String());
// local Func = compilestring(Reader.readUtf8String());
// local Ret = Func();
// print(Ret);
// local Tabs = dofile("aw.nut");
// print(Tabs.itemInfo.len());
// local Address = L_Sq_GetExportByName("fopen");
// print(Address);
// L_Sq_CallFunc(0xE6E070, "void", 4, ["int", "int", "int", "int", "char"], L_sq_RA(0x1A5FB20), 0, 33, "", 0x65535);
// Rindro_Haker.LoadHook(0x4C9FA0, ["pointer", "int", "void"],
// function(args) {
// // print(555);
// return null;
// },
// function(args) {
// // print(666);
// return null;
// });
// print(L_sq_StringBinById(435110));
// Rindro_Haker.LoadHook(0x4017F0, ["int", "int", "int", "int"],
// function(args) {
// print(args[0]);
// print(args[1]);
// print(args[2]);
// return null;
// },
// function(args) {
// return null;
// });
// 0x121a1e2
//this 0x1D17638
// local Read = Memory.alloc(10000);
// print(Read);
// L_Sq_CallFunc(0x11A2030, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], 0x1D17638, Memory.allocUtf8String("sqr/a.nut").C_Object, Read.C_Object, 0x100000,0x19DAF4);
// local Str = Read.readUtf8String();
// print(Str);
// local A = IRDSQRCharacter.pushScriptFiles("a.nut");
// local Read = Memory.alloc(10000);
// print(Read);
// L_Sq_CallFunc(0x121A100, "char", FFI_MS_CDECL, ["int", "int", "int", "int", "int"], Memory.allocUtf8String("").C_Object, Memory.allocUtf8String("sqr/a.nut").C_Object, Read.C_Object, 0x100000,0x19DAF4);
// local Str = Read.readUtf8String();
// print(Str);
// L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 79, 0, 0);
// local Old = L_sq_RA(0x1AB7CDC);
// Old = L_sq_RA(Old + 0x3038);
// local ItemObject = L_sq_GetItem(27582);
// //移除
// L_Sq_CallFunc(0x825AD0, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),Old);
// //移除Ani
// L_Sq_CallFunc(0x84CD10, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),Old);
// //穿戴
// L_Sq_CallFunc(0x825570, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),ItemObject);
// local ItemObject = L_sq_GetItem(101020037);
// // print(ItemObject);
// // L_Sq_CallFunc(0x4B0F10, "int", FFI_THISCALL, ["int"], L_sq_RA(0x1AE45B4));
// local Hs = L_Sq_CallFunc(0x779EB0, "pointer", FFI_THISCALL, ["int"], L_sq_RA(0x1AE45B4));
// print(Hs);
// Hs = L_sq_P2I(Hs);
// print(format("%02x", Hs));
// L_Sq_CallFunc(0x825AD0, "void", FFI_THISCALL, ["int","int"], Hs, ItemObject);
// L_Sq_CallFunc(0x84CD10, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC), ItemObject);
// local PP = L_Sq_CallFunc(0x65DE50, "pointer", FFI_THISCALL, ["pointer"], 0xE8675E97, 0);
// print("PP: " + PP);
// local WuseAdd = L_Sq_CallFunc(0x972220, "int", FFI_MS_CDECL, ["int", "int", "int"], 27582, 0x19E990, 0);
// print("MY: " + WuseAdd);
// print(L_sq_Test());
// local Address = L_sq_Test(26058);
// print(Address);
// local Ret = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Address, 41);
// print(Ret);
// L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], Ret, 600, 200, 28, 28);
// Rindro_Haker.LoadHook(0x11C0410, ["int", "int", "int", "int"],
// function(args) {
// // print(args[0]);
// return null;
// },
// function(args) {
// // print(args.pop());
// // print(">>>>>>");
// return null;
// });