diff --git a/Base/CallBack/DrawHudMain.nut b/Base/CallBack/DrawHudMain.nut index 1480dfb..ef62ce1 100644 --- a/Base/CallBack/DrawHudMain.nut +++ b/Base/CallBack/DrawHudMain.nut @@ -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); diff --git a/Base/CallBack/DrawMain.nut b/Base/CallBack/DrawMain.nut index bb22613..2f56a6d 100644 --- a/Base/CallBack/DrawMain.nut +++ b/Base/CallBack/DrawMain.nut @@ -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); \ No newline at end of file diff --git a/Base/UI/Lenheart_Cursor_Class.nut b/Base/UI/Lenheart_Cursor_Class.nut new file mode 100644 index 0000000..228c5ae --- /dev/null +++ b/Base/UI/Lenheart_Cursor_Class.nut @@ -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; +} \ No newline at end of file diff --git a/Base/UI/Lenheart_Event_Class.nut b/Base/UI/Lenheart_Event_Class.nut index 9434995..2377e1c 100644 --- a/Base/UI/Lenheart_Event_Class.nut +++ b/Base/UI/Lenheart_Event_Class.nut @@ -168,6 +168,8 @@ class Rindro_EventList { x = X - 456, y = Y }; + + L_sq_RefreshEventIcon(); } constructor() { diff --git a/Base/UI/Lenheart_UI_Class.nut b/Base/UI/Lenheart_UI_Class.nut index 4172256..628ee1e 100644 --- a/Base/UI/Lenheart_UI_Class.nut +++ b/Base/UI/Lenheart_UI_Class.nut @@ -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); + } } //复选框 diff --git a/Base/_Tool/Hacker_Class.nut b/Base/_Tool/Hacker_Class.nut new file mode 100644 index 0000000..194afc1 --- /dev/null +++ b/Base/_Tool/Hacker_Class.nut @@ -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(); \ No newline at end of file diff --git a/Base/_Tool/Hacker_RegApi.nut b/Base/_Tool/Hacker_RegApi.nut new file mode 100644 index 0000000..fb1696b --- /dev/null +++ b/Base/_Tool/Hacker_RegApi.nut @@ -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; + } + + +} \ No newline at end of file diff --git a/Base/_Tool/MemoryClass.nut b/Base/_Tool/MemoryClass.nut new file mode 100644 index 0000000..43ccbb0 --- /dev/null +++ b/Base/_Tool/MemoryClass.nut @@ -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(); + } +} \ No newline at end of file diff --git a/Base/_Z_Data/ItemData.nut b/Base/_Z_Data/ItemData.nut index 76aa720..be01325 100644 --- a/Base/_Z_Data/ItemData.nut +++ b/Base/_Z_Data/ItemData.nut @@ -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 { } } } -} \ No newline at end of file +} + + + + +// 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; +// }); \ No newline at end of file diff --git a/DofileList.nut b/DofileList.nut index 5cf172e..8a66351 100644 --- a/DofileList.nut +++ b/DofileList.nut @@ -4,6 +4,9 @@ dofile("sqr/Base/_ENUM/_ENUM_KEY.nut"); //按键枚举类 //基础工具类 dofile("sqr/Base/_Tool/BaseTool_Class.nut"); //基础工具类 +dofile("sqr/Base/_Tool/MemoryClass.nut"); //内存类 +dofile("sqr/Base/_Tool/Hacker_Class.nut"); //黑客工具类 +dofile("sqr/Base/_Tool/Hacker_RegApi.nut"); //黑客注册工具类 //基础工具类 //回调注册类 @@ -20,6 +23,7 @@ dofile("sqr/Base/_Z_Data/CharacterInfoData.nut"); //角色信息数据 //数据类 //UI框架类 +dofile("sqr/Base/UI/Lenheart_Cursor_Class.nut"); //鼠标类 dofile("sqr/Base/UI/OldWindowsMap.nut"); //窗口Map dofile("sqr/Base/UI/Lenheart_UI_Class.nut"); //UI dofile("sqr/Base/UI/Lenheart_Ani_Class.nut"); //Ani @@ -47,3 +51,4 @@ dofile("sqr/Project/Shapeshifting/Shapeshifting.nut"); //时装变身 dofile("sqr/Project/HudUi/HudUi.nut"); //百级UI dofile("sqr/Project/DamagePerSecond/DamagePerSecond.nut"); //秒伤统计 dofile("sqr/Project/CollectionBox/CollectionBox.nut"); //收集箱 +dofile("sqr/Project/HorseGuessing/HorseGuessing.nut"); //骑士马战 \ No newline at end of file diff --git a/Project/Anton/Rindro_Anton.nut b/Project/Anton/Rindro_Anton.nut index 45b4260..a11015f 100644 --- a/Project/Anton/Rindro_Anton.nut +++ b/Project/Anton/Rindro_Anton.nut @@ -357,41 +357,43 @@ class RinDro_Anton extends Rindro_BaseToolClass { //绘制通关副本动画 function DrawPlayAni(obj) { if (!DrawPlayAniMark || !DrawPlayAniT) return; + local Offset = 0; + if (getroottable().Rindro_Scr_Width > 800) Offset = ((getroottable().Rindro_Scr_Width - 800) / 2); local Ct = Clock() - DrawPlayAniT; switch (DrawPlayAniMark) { case 1: //通关擎天A case 2: //通关擎天B case 13: //通关擎天B - local Ani = T_DrawDynamicAni(obj, "common/anton/title/04_clear_back.ani", 0, 180, "安图恩通关擎天A" + DrawPlayAniT); + local Ani = T_DrawDynamicAni(obj, "common/anton/title/04_clear_back.ani", 0 + Offset, 180, "安图恩通关擎天A" + DrawPlayAniT); local str = "擎天之柱A"; if (DrawPlayAniMark == 2) str = "擎天之柱B" if (DrawPlayAniMark == 13) str = "黑色火山" - if (Ct >= 350 && Ct <= 1400) L_sq_DrawCode(str, 236 + 158 - LenheartTextClass.GetStringLength(str) / 2, 244, sq_RGBA(255, 146, 0, 250), 0, 1); + if (Ct >= 350 && Ct <= 1400) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 244, sq_RGBA(255, 146, 0, 250), 0, 1); break; case 5: - T_DrawDynamicAni(obj, "common/anton/title/00_start_back.ani", 430, 210 + 26, "安图恩阻截开始" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/00_start_back.ani", 430 + Offset, 210 + 26, "安图恩阻截开始" + DrawPlayAniT); break; case 6: - T_DrawDynamicAni(obj, "common/anton/title/02_success_back.ani", 430, 210 + 26, "安图恩阻截成功" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/02_success_back.ani", 430 + Offset, 210 + 26, "安图恩阻截成功" + DrawPlayAniT); break; case 7: - T_DrawDynamicAni(obj, "common/anton/title/01_fail_back.ani", 430, 210 + 26, "安图恩阻截失败" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/01_fail_back.ani", 430 + Offset, 210 + 26, "安图恩阻截失败" + DrawPlayAniT); break; case 8: - T_DrawDynamicAni(obj, "common/anton/title/00_start_back_1.ani", 430, 210 + 26, "安图恩灭杀开始" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/00_start_back_1.ani", 430 + Offset, 210 + 26, "安图恩灭杀开始" + DrawPlayAniT); break; case 9: - T_DrawDynamicAni(obj, "common/anton/title/02_success_back_1.ani", 430, 210 + 26, "安图恩灭杀成功" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/02_success_back_1.ani", 430 + Offset, 210 + 26, "安图恩灭杀成功" + DrawPlayAniT); break; case 10: - T_DrawDynamicAni(obj, "common/anton/title/01_fail_back_1.ani", 430, 210 + 26, "安图恩灭杀失败" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/01_fail_back_1.ani", 430 + Offset, 210 + 26, "安图恩灭杀失败" + DrawPlayAniT); break; case 11: case 12: - T_DrawDynamicAni(obj, "common/anton/title/03_warning_back.ani", 0, 210 + 26, "安图恩火山警告" + DrawPlayAniT); + T_DrawDynamicAni(obj, "common/anton/title/03_warning_back.ani", 0 + Offset, 210 + 26, "安图恩火山警告" + DrawPlayAniT); local str = "火山能量即将过载,请立即前往压制!!!"; if (DrawPlayAniMark == 12) str = "震颤的大地已经复活,请立即前往压制!!!" - if (Ct >= 350 && Ct <= 1600) L_sq_DrawCode(str, 236 + 158 - LenheartTextClass.GetStringLength(str) / 2, 320, sq_RGBA(255, 50, 50, 250), 0, 1); + if (Ct >= 350 && Ct <= 1600) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 320, sq_RGBA(255, 50, 50, 250), 0, 1); break; default: break; diff --git a/Project/Anton/Rindro_Anton_FightSituation.nut b/Project/Anton/Rindro_Anton_FightSituation.nut index 5bd57ac..83f4e9c 100644 --- a/Project/Anton/Rindro_Anton_FightSituation.nut +++ b/Project/Anton/Rindro_Anton_FightSituation.nut @@ -800,7 +800,7 @@ class Rindro_AntonFightSituationC extends LenheartNewUI_Windows { LenheartNewUI_Windows.SyncPos(X, Y); MapEventTest(obj); if (SelectDgnMarkFlag) { - L_sq_WA(0x1b46898, 47); + R_Mouse.SetType(151); } @@ -810,7 +810,7 @@ class Rindro_AntonFightSituationC extends LenheartNewUI_Windows { function OnMouseLbUp(MousePos_X, MousePos_Y) { if (SelectDgnMarkFlag != 0) { SelectDgnMarkFlag = 0; - L_sq_WA(0x1b46898, 0); + R_Mouse.SetType(0); foreach(d_obj in DgnList) { if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + d_obj.X, Y + d_obj.Y, 71, 71)) { local T = { diff --git a/Project/Anton/Rindro_Anton_PartyFormation.nut b/Project/Anton/Rindro_Anton_PartyFormation.nut index 32e4e15..33dd64d 100644 --- a/Project/Anton/Rindro_Anton_PartyFormation.nut +++ b/Project/Anton/Rindro_Anton_PartyFormation.nut @@ -93,7 +93,7 @@ class Rindro_AntonPartyFormation extends LenheartNewUI_Windows { } if (PartyMarkFlag != -1) { - L_sq_WA(0x1b46898, 47); + R_Mouse.SetType(151); } } @@ -114,7 +114,7 @@ class Rindro_AntonPartyFormation extends LenheartNewUI_Windows { //还原编队的鼠标指针 if (this.PartyMarkFlag != -1) { this.PartyMarkFlag = -1; - L_sq_WA(0x1b46898, 0); + R_Mouse.SetType(0); } LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); } diff --git a/Project/Anton/Rindro_Anton_PartyMemberInfo.nut b/Project/Anton/Rindro_Anton_PartyMemberInfo.nut index 4e19ce4..c9549f9 100644 --- a/Project/Anton/Rindro_Anton_PartyMemberInfo.nut +++ b/Project/Anton/Rindro_Anton_PartyMemberInfo.nut @@ -86,14 +86,14 @@ class Rindro_AntonPartyInfoMemberC extends LenheartNewUI_CommonUi { } SendPackEx(T); win.PartyMarkFlag = -1; - L_sq_WA(0x1b46898, 0); + R_Mouse.SetType(0); win.ResetFocus(); return; } //点了其他队伍成员要还原编队状态 else { win.PartyMarkFlag = -1; - L_sq_WA(0x1b46898, 0); + R_Mouse.SetType(0); } } diff --git a/Project/Anton/Rindro_Anton_Reward.nut b/Project/Anton/Rindro_Anton_Reward.nut index 78c26aa..d1fe64a 100644 --- a/Project/Anton/Rindro_Anton_Reward.nut +++ b/Project/Anton/Rindro_Anton_Reward.nut @@ -363,8 +363,8 @@ class Rindro_Anton_RewardC extends LenheartNewUI_Windows { } //绘制物品边框 if (OpenRealXrate >= 0.6) { - local Rarity = AllItemInfoObject[CardInfo.item].Rarity; - local Name = AllItemInfoObject[CardInfo.item].Name; + local Rarity = Rindro_ItemInfoObject[CardInfo.item].Rarity; + local Name = Rindro_ItemInfoObject[CardInfo.item].Name; L_sq_DrawImg("interface2/raid/anton/reward/anton_reward.img", 5 + Rarity, X + 156 + (160 * i), Y + 378, 1, sq_RGBA(255, 255, 255, CradAlphaOffset), OpenRealXrate, 1.0); //绘制物品 @@ -459,7 +459,7 @@ class Rindro_Anton_RewardC extends LenheartNewUI_Windows { //奖励对象 local CardInfo = TeamReward[i]; if (CardInfo.Flag && CardInfo.item != -1) { - local Rarity = AllItemInfoObject[CardInfo.item].Rarity; + local Rarity = Rindro_ItemInfoObject[CardInfo.item].Rarity; //物品出现光 if (!CardInfo.grade) { if (Rarity <= 2) { //低于紫色闪紫光 diff --git a/Project/AradPass/AradPass.nut b/Project/AradPass/AradPass.nut index 142bdda..4b108a7 100644 --- a/Project/AradPass/AradPass.nut +++ b/Project/AradPass/AradPass.nut @@ -354,7 +354,7 @@ function Lenheart_AradPass_Fun(obj) { if (!RootTab.rawin("AradPass_Obj")) { RootTab.rawset("AradPass_Obj", true); local Win = LenheartNewUI_CreateWindow(AradPassC, "阿拉德战令窗口", ((getroottable().Rindro_Scr_Width - 558) / 2).tointeger(), 46, 558, 484, 15); - EventList_Obj.AddEvent("阿拉德战令", 928, Win,"interface2/hud/information_button/information_button_cn.img"); + EventList_Obj.AddEvent("阿拉德战令", 928, Win, "interface2/hud/information_button/information_button_cn.img"); } } diff --git a/Project/AradPass/AradPass_Quest.nut b/Project/AradPass/AradPass_Quest.nut index 334847a..c9870b9 100644 --- a/Project/AradPass/AradPass_Quest.nut +++ b/Project/AradPass/AradPass_Quest.nut @@ -380,6 +380,23 @@ class AradPass_QuestC extends LenheartNewUI_Windows { DrawTop(obj); } + //override + //鼠标滚轮事件回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + + + if (Flag) { + if (QuestWheelNow > 0) QuestWheelNow--; + } + if (!Flag) { + if (QuestWheelNow< QuestWheelMax - 6) QuestWheelNow++; + } + + + //调用原生方法 + LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + } + //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y - 210); @@ -392,12 +409,6 @@ class AradPass_QuestC extends LenheartNewUI_Windows { Visible = false; } - if (IMouse.IsWheelUp()) { - if (QuestWheelNow > 0) QuestWheelNow--; - } - if (IMouse.IsWheelDown()) { - if (QuestWheelNow< QuestWheelMax - 6) QuestWheelNow++; - } foreach(Pos, winobj in QuestItemList[Page]) { if (Pos >= QuestWheelNow && Pos <= QuestWheelNow + 5) { diff --git a/Project/CollectionBox/CollectionBox.nut b/Project/CollectionBox/CollectionBox.nut index 7f3d5c8..b83fbdd 100644 --- a/Project/CollectionBox/CollectionBox.nut +++ b/Project/CollectionBox/CollectionBox.nut @@ -11,6 +11,7 @@ class LenheartNewUI_CollectionBox_BaseButton extends LenheartNewUI_CommonUi { Path = null; Idx = null; SetFlag = null; + SetIndex = null; constructor(X, Y, W, H, Path, Idx) { @@ -65,7 +66,7 @@ class CollectionBoxC extends LenheartNewUI_Windows { // NoWindow = true; //是否可见 - // Visible = false; + Visible = false; //盒子按钮集合 BoxButton = null; @@ -76,16 +77,45 @@ class CollectionBoxC extends LenheartNewUI_Windows { //当前页面 Page = null; - // + //滚轮偏移 + ScrollPos = 0; + + //页面滚轮偏移 + PageScrollPos = 0; + + //悬停的宝珠 + HoverItem = null; + + //镶嵌成功音效包 + function AudioCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + local Type = Jso.Type; + local obj = sq_getMyCharacter(); + + switch (Type) { + case 1: + obj.sq_PlaySound("TRADE_OK"); + break; + case 2: + obj.sq_PlaySound("ICON_DROP_TO_QUICKSLOT"); + break; + case 3: + obj.sq_PlaySound("GAMBLE_RESULT_GOOD"); + break; + } + + } //基础配置包 function GetInfoCallBack(Chunk) { - Info = Json.Decode(Chunk).info; + local Jso = Json.Decode(Chunk); + local ZlibStrBuf = Json.Decode(L_sq_Dezlib(Jso.ZipS)); + Info = ZlibStrBuf.info; foreach(Key, Aobj in Info) { if (!Page) Page = Key; - local StrBuf1 = L_sq_GetStringDrawArray(Aobj.attribute.Atts, 300); - Aobj.attribute.AttsS <- StrBuf1[0] + "..."; - Aobj.attribute.Atts <- StrBuf1; + local StrBuf1 = L_sq_GetStringDrawArray(Aobj.attS, 300); + Aobj.AttsS <- StrBuf1[0] + "..."; + Aobj.attS <- StrBuf1; } InitBoxButton(); @@ -98,11 +128,6 @@ class CollectionBoxC extends LenheartNewUI_Windows { }; SendPackEx(T); } - //收集箱收集信息 - function GetCollectInfoCallBack(Chunk) { - - // Info = Json.Decode(Chunk).info; - } constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; @@ -113,9 +138,10 @@ class CollectionBoxC extends LenheartNewUI_Windows { LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); Pack_Control.rawset(20077028, GetInfoCallBack.bindenv(this)); + Pack_Control.rawset(20077010, AudioCallBack.bindenv(this)); - Pack_Control.rawset(20077004, GetCollectInfoCallBack.bindenv(this)); GetCollectInfo(); + } //初始化按钮 @@ -135,12 +161,15 @@ class CollectionBoxC extends LenheartNewUI_Windows { //关闭按钮 local ButtonBuf = LenheartNewUI_CollectionBox_BaseButton(8, 95 + (RealPos * 72), 102, 70, InfoObj.img, 1); ButtonBuf.SetFlag = Pos; + ButtonBuf.SetIndex = RealPos; ButtonBuf.OnClick = function(ButtonObj) { Page = ButtonObj.SetFlag; }.bindenv(this); ButtonBuf.SetCallBackFunc(function(ButtonObj) { - - }); + ButtonObj.Localtion_Y = 95 + ((ButtonObj.SetIndex - ScrollPos) * 72); + if (ButtonObj.Localtion_Y< 95 || ButtonObj.Localtion_Y > 311) ButtonObj.Localtion_X = -9000; + else ButtonObj.Localtion_X = 8; + }.bindenv(this)); Childrens.append(ButtonBuf); RealPos++; } @@ -164,17 +193,43 @@ class CollectionBoxC extends LenheartNewUI_Windows { L_sq_DrawImg("interface2/collectbox/collectboxbtn.img", 0, X, Y); //背景 L_sq_DrawImg(Info[Page].img, 0, X + 7, Y + 26); + //绘制窗口名称 + L_sq_DrawCode("我的收集箱", X + 160, Y + 8, sq_RGBA(255, 177, 0, 250), 0, 1); //绘制收集箱名称 L_sq_DrawCode(Info[Page].name, X + 208 - LenheartTextClass.GetStringLength(Info[Page].name) / 2, Y + 40, sq_RGBA(255, 177, 0, 250), 0, 1); //绘制收集箱信息缩略 - L_sq_DrawCode(Info[Page].attribute.AttsS, X + 228 - LenheartTextClass.GetStringLength(Info[Page].attribute.AttsS) / 2, Y + 40 + 20, sq_RGBA(255, 242, 0, 250), 0, 1); + L_sq_DrawCode(Info[Page].AttsS, X + 228 - LenheartTextClass.GetStringLength(Info[Page].AttsS) / 2, Y + 40 + 20, sq_RGBA(255, 242, 0, 250), 0, 1); + + + HoverItem = null; + setClip(X + 95, Y + 95, X + 348, Y + 375); //开始裁切 + //绘制宝珠 + foreach(pos, value in Info[Page].itemIds) { + //绘制格子 + L_sq_DrawImg(Info[Page].img, 5, X + value.x, Y + value.y + PageScrollPos); + //绘制宝珠 + DrawItemEx(X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos, value.id, 1); + //判断是否拥有 + if (!value.isTure) { + //遮挡 + L_sq_DrawImg("interface/windowcommon.img", 157, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos); + L_sq_DrawImg("interface/windowcommon.img", 157, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos); + L_sq_DrawImg("interface/windowcommon.img", 157, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos); + } + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + value.x + Info[Page].Xp, Y + value.y + Info[Page].Yp + PageScrollPos, 29, 29)) { + HoverItem = value; + } + } + releaseClip(); //裁切结束 } function TopShow(obj) { + if (!Info) return; if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 86, Y + 53, 272, 15)) { - local StrArr = Info[Page].attribute.Atts; - local Str = Info[Page].attribute.AttsS; + local StrArr = Info[Page].attS; + local Str = Info[Page].AttsS; L_sq_DrawWindow(IMouse.GetXPos() - 140 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 36, 0 + LenheartTextClass.GetStringLength(Str), 0 + (14 * StrArr.len()), "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); local Xpos = LenheartTextClass.GetStringLength(Str) / 2; @@ -184,6 +239,23 @@ class CollectionBoxC extends LenheartNewUI_Windows { } } + + //override + function DrawItemInfo() { + if (MousePosFlag != 2) return; + 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; + } + } + function Show(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); @@ -192,6 +264,83 @@ class CollectionBoxC extends LenheartNewUI_Windows { //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y); + + + } + + //鼠标位置Flag + MousePosFlag = 0; + + //override + function OnMouseProc(Flag, MousePos_X, MousePos_Y) { + //调用原生方法 + LenheartNewUI_Windows.OnMouseProc(Flag, MousePos_X, MousePos_Y); + + MousePos_X -= X; + MousePos_Y -= Y; + //鼠标在栏目窗口内 + if (MousePos_X >= 8 && MousePos_Y >= 95 && MousePos_X <= 110 && MousePos_Y <= 375) { + MousePosFlag = 1; + } + //鼠标在宝珠窗口内 + else if (MousePos_X > 95 && MousePos_Y >= 95 && MousePos_X <= 348 && MousePos_Y <= 375) { + MousePosFlag = 2; + } else MousePosFlag = 0; + } + + //override + //鼠标滚轮事件回调 + function OnMouseWheel(Flag, MousePos_X, MousePos_Y) { + MousePos_X -= X; + MousePos_Y -= Y; + + //左侧栏目的滚动逻辑 + if (MousePosFlag == 1) { + if (Flag) { + if (ScrollPos > 0) ScrollPos -= 1; + } + if (!Flag) { + if (ScrollPos<(Info.len() - 4)) ScrollPos += 1; + } + } + //左侧栏目的滚动逻辑 + if (MousePosFlag == 2) { + if (Flag) { + if (PageScrollPos< 0) PageScrollPos += 47; + } + if (!Flag) { + if (PageScrollPos > (0 - Info[Page].gl)) PageScrollPos -= 47; + } + } + + + //调用原生方法 + LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y); + } + + + //override + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + //调用原生方法 + LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); + + if (HoverItem) { + local RealOp = 20077005; + if (HoverItem.isTure) RealOp = 20077009; + local T = { + op = RealOp, + boxId = Info[Page].id, + itemId = HoverItem.id + } + SendPackEx(T); + } + } + + function OpenCallBack() { + GetCollectInfo(); + this.Visible = true; + ResetFocus(); } } @@ -201,7 +350,9 @@ function Lenheart_CollectionBox_Fun(obj) { local RootTab = getroottable(); if (!RootTab.rawin("CollectionBox_Obj")) { RootTab.rawset("CollectionBox_Obj", true); - LenheartNewUI_CreateWindow(CollectionBoxC, "收集箱", ((getroottable().Rindro_Scr_Width - 376) / 2).tointeger(), 64, 376, 384, 28); + local Winobj = LenheartNewUI_CreateWindow(CollectionBoxC, "收集箱窗口", ((getroottable().Rindro_Scr_Width - 376) / 2).tointeger(), 64, 376, 384, 28); + + EventList_Obj.AddEvent("收集箱", 73, Winobj, "interface2/hud/information_button/information_button_cn.img"); } } diff --git a/Project/HorseGuessing/HorseGuessing.nut b/Project/HorseGuessing/HorseGuessing.nut new file mode 100644 index 0000000..08ea3b8 --- /dev/null +++ b/Project/HorseGuessing/HorseGuessing.nut @@ -0,0 +1,223 @@ +/* +文件名:HorseGuessing.nut +路径:Project/HorseGuessing/HorseGuessing.nut +创建日期:2024-09-25 20:30 +文件用途:骑士马战 +*/ +dofile("sqr/Project/HorseGuessing/HorseGuessing_Guide.nut"); //骑士马战指引 +dofile("sqr/Project/HorseGuessing/HorseGuessing_KnightInfo.nut"); //骑士马战资料 +class HorseGuessingC extends LenheartNewUI_Windows { + //调试模式 + //DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + //是否可见 + // Visible = false; + + //标题栏 + Title = null; + //当前页面 + Page = 0; + + //页面选择器 + PageSelectM = 0; + //指引页面 + GuidePage = null; + //骑士资料页面 + KnightInfoPage = null; + //过往战绩页面 + PastRecordPage = null; + + + //骑手名称 + RiderName = [ + "伊撒尔", + "理查德", + "席恩", + "吉尔特", + "爱德华", + "罗兰", + "莱奥", + "贝奥武夫", + ]; + + //当前选择骑手 + NowSelectRider = 0; + + //下注 + BetItem = 0; + + //剩余可下注数量 + ResidueCoin = 10000; + + + //骑手信息 + RiderInfo = null; + + //获取选手具体信息 + function GetRiderInfo() { + local T = { + op = 20055003, + code = NowSelectRider, + } + SendPack(T); + } + + //获取选手具体信息回调包 + function GetRiderInfoCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + RiderInfo = []; + for (local i = 0; i< Jso.outcome.len(); i++) { + RiderInfo.append(Jso.outcome[i]); + } + } + + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + Title = []; + RiderInfo = []; + //读取配置文件 + local Config = R_Utils.ReadScriptConfig("etc/rindro/horseguessing/horseguessing.dat", 1024, "utf8"); + + RiderName = Config.RiderInfo; + BetItem = Config.ItemId; + //把big的名字 转成 utf8 + for (local i = 0; i< RiderName.len(); i++) { + RiderName[i] = Sq_ConvertWideChar(RiderName[i], "big5"); + } + + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + GuidePage = HorseGuessing_GuideC("骑士马战_指引窗口", X + 7, Y + 50, 214, 480, 0); + KnightInfoPage = HorseGuessing_KnightInfoC("骑士马战_资料窗口", X + 7, Y + 50, 214, 480, 0); + + //默认构造时切换到0页 + ChangePage(1); + } + + function ChangePage(ToPage) { + + foreach(ButtonObj in Title) { + ButtonObj.State = 0; + } + Page = ToPage; + Title[ToPage].State = 1; + + RemoveChild("骑士马战_指引窗口"); + RemoveChild("骑士马战_资料窗口"); + RemoveChild("骑士马战_战绩窗口"); + + PageSelectM = ToPage; + switch (ToPage) { + case 0: { + AddChild(GuidePage); + break; + } + case 1: { + AddChild(KnightInfoPage); + break; + } + case 2: + AddChild(PastRecordPage); + break; + } + } + + function RegisterWidget() { + //关闭按钮 + local CloseButton = LenheartNewUI_BaseButton(750, 0, 11, 12, "interface/lenheartwindowcommon.img", 276); + CloseButton.OnClick = function() { + this.Visible = false; + }.bindenv(this); + Childrens.append(CloseButton); + + local Tabbars1 = LenheartNewUI_TabbarsText(12, 27, "指引"); + Tabbars1.State = 1; + AddChild(Tabbars1); + Tabbars1.OnClick = function() { + ChangePage(0); + }.bindenv(this); + Title.append(Tabbars1); + + local Tabbars2 = LenheartNewUI_TabbarsText(74, 27, "骑士资料"); + AddChild(Tabbars2); + Tabbars2.OnClick = function() { + ChangePage(1); + }.bindenv(this); + Tabbars2.SetTextOffset(7, 3); + Title.append(Tabbars2); + + local Tabbars3 = LenheartNewUI_TabbarsText(136, 27, "过往战绩"); + AddChild(Tabbars3); + Tabbars3.OnClick = function() { + ChangePage(2); + }.bindenv(this); + Tabbars3.SetTextOffset(7, 3); + Title.append(Tabbars3); + + } + + function DrawInfo(obj) { + + + } + + //绘制主界面 + function DrawMain(obj) { + //绘制窗口 + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 33, X, Y); + //绘制左边底槽窗口 + L_sq_DrawWindow(X + 2, Y + 46, 210, 435, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + + //绘制详情页 + DrawInfo(obj); + + //BackGround + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img", 0, X + 227, Y + 26); + + // L_sq_DrawCode(L_sq_StringBinById(271069), X + 400, Y + 386, sq_RGBA(255, 255, 255, 250), 0, 1); + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + + //主动调用子对象窗口的Proc + foreach(Object in Childrens) { + if (Object instanceof LenheartNewUI_Windows) + Object.Proc(obj); + } + } + + + function OpenCallBack() { + this.Visible = true; + ResetFocus(); + } +} +getroottable().rawdelete("HorseGuessing_Obj"); + +function Lenheart_HorseGuessing_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("HorseGuessing_Obj")) { + RootTab.rawset("HorseGuessing_Obj", true); + local Winobj = LenheartNewUI_CreateWindow(HorseGuessingC, "骑士马战窗口", ((getroottable().Rindro_Scr_Width - 772) / 2).tointeger(), 30, 772, 539, 28); + + EventList_Obj.AddEvent("骑士马战", 106, Winobj, "interface2/yosin/eventsystemlist2.img"); + } +} + +getroottable()["LenheartFuncTab"].rawset("HorseGuessingFuncN", Lenheart_HorseGuessing_Fun); \ No newline at end of file diff --git a/Project/HorseGuessing/HorseGuessing_Guide.nut b/Project/HorseGuessing/HorseGuessing_Guide.nut new file mode 100644 index 0000000..a456d10 --- /dev/null +++ b/Project/HorseGuessing/HorseGuessing_Guide.nut @@ -0,0 +1,58 @@ +/* +文件名:HorseGuessing_Guide.nut +路径:Project/HorseGuessing/HorseGuessing_Guide.nut +创建日期:2024-09-25 20:50 +文件用途:骑士马战指引窗口 +*/ +class HorseGuessing_GuideC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + //是否可见 + // Visible = false; + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + } + + function RegisterWidget() {} + + //绘制主界面 + function DrawMain(obj) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 0, X, Y); + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X - 7, Y - 50); + + if (Parent && Parent.Visible && Parent.PageSelectM == 0) { + Visible = true; + X = Parent.X + 7; + Y = Parent.Y + 50; + } else { + Visible = false; + } + } + + + //因为要重载LenheartNewUI_Windows的构造函数 + function ResetFocus() { + + } +} + + +getroottable().rawdelete("HorseGuessing_Obj"); \ No newline at end of file diff --git a/Project/HorseGuessing/HorseGuessing_KnightInfo.nut b/Project/HorseGuessing/HorseGuessing_KnightInfo.nut new file mode 100644 index 0000000..ccc17b8 --- /dev/null +++ b/Project/HorseGuessing/HorseGuessing_KnightInfo.nut @@ -0,0 +1,120 @@ +/* +文件名:HorseGuessing_KnightInfo.nut +路径:Project/HorseGuessing/HorseGuessing_KnightInfo.nut +创建日期:2024-09-25 21:11 +文件用途:骑士信息 +*/ +class HorseGuessing_KnightInfoC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + //是否可见 + // Visible = false; + + + //输入框 + InputObject = null; + + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + } + + function RegisterWidget() { + //下注按钮 + local BetButton = LenheartNewUI_BaseButton(54, 654, 129, 33, "interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 22); + BetButton.OnClickSound = "BUTTON_01"; + BetButton.OnClick = function() { + local T = { + op = 20055005, + code = Parent.NowSelectRider, + num = InputObject.str, + } + SendPackEx(T); + }.bindenv(this); + Childrens.append(BetButton); + + InputObject = LenheartNewUI_BaseInput(80, 564, 76, 20); + AddChild(InputObject); + } + + //绘制主界面 + function DrawMain(obj) { + + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 1, X, Y); + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", 50, X + 7, Y + 12); + + //DrawParent.RiderInfo + T_DrawDynamicAni(obj, "common/horseguessing/knight" + Parent.NowSelectRider + ".ani", X + 2, Y + 130, "HorseGuessingRiderAnimotion" + Parent.NowSelectRider); + T_DrawDynamicAni(obj, "common/horseguessing/knightinfoeffect.ani", X - 1, Y - 9, "HorseGuessingRiderAnimotionEff"); + + //绘制名字 + local RiderNameStr = Parent.RiderName[Parent.NowSelectRider]; + L_sq_DrawCode(RiderNameStr, X + 111 - (LenheartTextClass.GetStringLength(RiderNameStr) / 2), Y + 116 + 18 + 146 + 3, sq_RGBA(255, 255, 255, 250), 0, 1); + + //绘制下注道具 + DrawItemBase(X + 74, Y + 320, Parent.BetItem, 1); + + + //骑手胜率信息 + if (Parent.RiderInfo && Parent.RiderInfo.len() >= 5) { + L_sq_DrawCode("获胜 : " + Parent.RiderInfo[2] + "次", X + 25 + 5, Y + 56 + 17, sq_RGBA(255, 255, 255, 250), 0, 1); + L_sq_DrawCode(Parent.RiderInfo[0] + "胜" + Parent.RiderInfo[1] + "败", X + 25 + 5, Y + 56 + 17 + 19, sq_RGBA(255, 255, 255, 250), 0, 1); + local WinRate = 0; + if (Parent.RiderInfo[0] + Parent.RiderInfo[1] != 0) + WinRate = ((Parent.RiderInfo[0].tofloat() / (Parent.RiderInfo[0] + Parent.RiderInfo[1]).tofloat()) * 100.0).tointeger(); + L_sq_DrawCode("胜率 : " + WinRate + "%", X + 25 + 5, Y + 56 + 17 + 19 + 15, sq_RGBA(255, 255, 255, 250), 0, 1); + + if (Parent.RiderInfo[3] != 0 && Parent.RiderInfo[4] != 0) { + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", Parent.RiderInfo[3], X + 25 + 5 + 152, Y + 62); + L_sq_DrawImg("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_info_window.img", Parent.RiderInfo[4], X + 25 + 5 + 152, Y + 62 + 36); + } + } + + + //绘制剩余道具数量 + if (Parent.ResidueCoin != null) { + L_sq_DrawCode(Parent.ResidueCoin.tostring(), X + 128, Y + 386, sq_RGBA(255, 255, 255, 250), 0, 1); + } + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X - 7, Y - 210); + + if (Parent && Parent.Visible && Parent.PageSelectM == 1) { + Visible = true; + X = Parent.X + 7; + Y = Parent.Y + 50; + } else { + Visible = false; + } + + //判断如果输入的金额大于自身有的金额 + if (InputObject.str.len() > 0 && InputObject.str.tointeger() > Parent.ResidueCoin) { + InputObject.SetStr(Parent.ResidueCoin.tostring()); + } + } + + + //因为要重载LenheartNewUI_Windows的构造函数 + function ResetFocus() { + + } +} + + +getroottable().rawdelete("HorseGuessing_Obj"); \ No newline at end of file diff --git a/Project/HudUi/HudUi.nut b/Project/HudUi/HudUi.nut index 5ac4a20..d2ca854 100644 --- a/Project/HudUi/HudUi.nut +++ b/Project/HudUi/HudUi.nut @@ -58,6 +58,15 @@ class HudUiC extends LenheartNewUI_Windows { //城镇名称 L_sq_WA(0x004CA27C, 850); + //城镇过场Tips背景 + L_sq_WA(0x004580FD, 400 + 133); + //城镇过场Tips文本 + L_sq_WA(0x004581DD, 400 + 133); + + //头顶滚动公告 + L_sq_WAB(0x11FA640, 0xC3); + + //物品栏 for (local i = 0; i< 6; i++) { @@ -120,8 +129,8 @@ class HudUiC extends LenheartNewUI_Windows { L_sq_WA(5006965, -5000); //MP文字标识 Y轴 //BUFF图标 X在C++Hook中处理 - L_sq_WAB(0x4c8bf5, 534); //Buff图标Y - L_sq_WAB(0x4bf55a, 534); //Buff图标文字标识Y + L_sq_WAB(0x4c8bf5, 542); //Buff图标Y + L_sq_WAB(0x4bf55a, 542); //Buff图标文字标识Y //技能变更类型 local SkillChanageA = L_sq_RA(0x01ADE0CC) + 0x124; @@ -558,7 +567,18 @@ class HudUiC extends LenheartNewUI_Windows { //绘制主界面 function DrawMain(obj) { //绘制背景 - L_sq_DrawImg("interface2/hud/hud.img", 0, 0, 526); + L_sq_DrawImg("interface2/hud/lenheartaddhud.img", 0, 347, 526); + + //绘制框 + for (local i = 0; i< 6; i++) { + //消耗品 + L_sq_DrawImg("interface2/hud/hud.img", 200, 134 + (i * 31), 567); + //上排技能 + L_sq_DrawImg("interface2/hud/hud.img", 201, 431 + (i * 31), 531); + L_sq_DrawImg("interface2/hud/hud.img", 201, 431 + (i * 31), 562); + } + //绘制疲劳底框 + L_sq_DrawImg("interface2/hud/hud.img", 230, 774, 592); //绘制血球蓝球 DrawBall(obj); @@ -577,6 +597,7 @@ class HudUiC extends LenheartNewUI_Windows { //绘制活动图标背景槽 DrawEventBackground(obj); + } function Show(obj) { diff --git a/Project/RepairWorldMap/RepairWorldMap.nut b/Project/RepairWorldMap/RepairWorldMap.nut index c0d5231..6aec0d0 100644 --- a/Project/RepairWorldMap/RepairWorldMap.nut +++ b/Project/RepairWorldMap/RepairWorldMap.nut @@ -125,6 +125,7 @@ function Sq_DrawMiniMapUI(obj) { getroottable().rawdelete("RepairWorldMap_Obj"); function Lenheart_RepairWorldMap_Fun(obj) { + return; local RootTab = getroottable(); if (!RootTab.rawin("RepairWorldMap_Obj")) { RootTab.rawset("RepairWorldMap_Obj", LenheartNewUI_CreateWindow(RepairWorldMapC, "世界地图修补", 230, 0, 30, 30, 0)); diff --git a/Project/Tuguan/Tuguan.nut b/Project/Tuguan/Tuguan.nut index 3da63e1..be9ea04 100644 --- a/Project/Tuguan/Tuguan.nut +++ b/Project/Tuguan/Tuguan.nut @@ -50,7 +50,12 @@ class Tuguan_NewC extends LenheartNewUI_Windows { State = 2; } - BoxWindowName = Rindro_ItemInfoObject[BoxId].Name; + //读取物品名称 + local ItemObject = L_sq_GetItem(BoxId); + local NamePointer = L_sq_RA(ItemObject + 0x20); + local Name = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString(); + + BoxWindowName = Name; Visible = true; //初始化完成 InitState = true; @@ -201,7 +206,7 @@ class Tuguan_NewC extends LenheartNewUI_Windows { local ItemId = RewardObj[i][z]["itemid"]; local ItemCount = RewardObj[i][z]["num"]; //绘制物品 - L_Sq_DrawItem((X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3, Y + 62 + 9 + ((ofs / 4) * 50) + 3, ItemId, ItemCount, 0, 0, 0); + DrawItemEx((X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3, Y + 62 + 9 + ((ofs / 4) * 50) + 3, ItemId, ItemCount); if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, (X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3, Y + 62 + 9 + ((ofs / 4) * 50) + 3, 24, 24)) { ItemInfoDrawS = {}; ItemInfoDrawS.X <- (X - 195) + 198 + 30 + 9 + ((ofs % 4) * 86) + (z * 34) + 3; diff --git a/folder-alias.json b/folder-alias.json index 0023ac2..852265e 100644 --- a/folder-alias.json +++ b/folder-alias.json @@ -97,5 +97,8 @@ }, "Project/CollectionBox": { "description": "收集箱" + }, + "Project/HorseGuessing": { + "description": "骑士马战" } } \ No newline at end of file