/* 文件名:OutfitSystem.nut 路径:Project/OutfitSystem/OutfitSystem.nut 创建日期:2026-03-01 03:11 文件用途: */ class OutfitSystemC extends LenheartNewUI_Windows { //调试模式 // DeBugMode = true; //不是窗口 // NoWindow = true; //是否可见 Visible = false; Img = Rindro_Image("interface2/buffswitching/buffswitching.img"); ItemSlotPos = [ [9, 154, 0x3044], //护肩 [9, 186, 0x3048], //下装 [9, 218, 0x304C], //鞋子 [41, 154, 0x3040], //上衣 [41, 186, 0x3050], //腰带 [73, 154, 0x3038], //武器 [73, 186, 0x3058], //手镯 [73, 218, 0x3060], //辅助装备 [73, 250, null], //耳环 [105, 154, 0x303C], //称号 [105, 186, 0x3054], //项链 [105, 218, 0x305C], //戒指 [105, 250, 0x3064], //魔法石 [148, 153, null], //武器装扮 [148, 186, 0x3034], //光环 [181, 153, 0x3014], //头部 [181, 186, 0x3028], //胸部 [181, 220, 0x302C], //腰部 [214, 153, 0x3010], //帽子 [214, 186, 0x301C], //上衣 [214, 220, 0x3020], //下装 [247, 153, 0x3018], //脸部 [247, 186, 0x3030], //皮肤 [247, 220, 0x3024], //鞋 [305, 165, 0x3068] //宠物 ]; ItemSlotList = null; //当前选中 CurrentSelect = null; //说明是否悬停 InstructionsIsHover = true; constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; //注册控件 RegisterWidget(); LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); local EachManager = Lenheart_Get_EachObj(); EachManager.AddEachForNpc(2, function(SThis) { //关闭按钮 local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3); ApplyEngagementButton.Icon = "interface2/popup_menu/popup_icon_cn.img"; ApplyEngagementButton.IconIdx = 52; ApplyEngagementButton.Str = "换装配置"; ApplyEngagementButton.Data = SThis.NPC_Index; ApplyEngagementButton.OnClick = function(Button) { InitWindow(); Button.Parent.CloseAllEach(); Button.Parent.CloseWindow(); ResetFocus(); R_Utils.PlaySound("WINDOW_SHOW"); }.bindenv(this); ApplyEngagementButton.SetCallBackFunc(function(Button) {}) SThis.AddChild(ApplyEngagementButton); }.bindenv(this)); //成功回包 Pack_Control.rawset(21015004, function(Chunk) { foreach(SlotObj in ItemSlotList) { SlotObj.RemoveItem(); } local Jso = Json.Decode(Chunk); if (Jso.EquipInfo == null) return; foreach(_Index, Equip in Jso.EquipInfo) { if (Equip[0] == 0) continue; local ItemId = Equip[0]; local Upgrade = Equip[1]; local Amplification = Equip[2]; local Forging = Equip[3]; local Enchanting = Equip[4]; local ItemObject = Rindro_Item(); ItemObject.LoadById(ItemId); ItemObject.SetUpgrade(Upgrade); ItemObject.SetAmplification(Amplification); ItemObject.SetForging(Forging); ItemObject.SetEnchanting(Enchanting); ItemSlotList[_Index.tointeger()].SetItem(ItemObject); } }.bindenv(this)); } function RegisterWidget() { //关闭按钮 local CloseButton = LenheartNewUI_BaseButton(340, 2, 11, 12, "interface/lenheartwindowcommon.img", 276); CloseButton.OnClick = function() { this.Visible = false; }.bindenv(this); Childrens.append(CloseButton); local SaveButton = LenheartNewUI_ButtonText(310, 52, 15, "记录"); SaveButton.DWidth = -19; SaveButton.Width = 36; SaveButton.SetTextOffset(-12, 1); SaveButton.OnClick = function() { if (CurrentSelect == null) { return; } SendPackEx({ op = 21015001, EquipInfo = ReadSelfEquip(), Slot = CurrentSelect, }) }.bindenv(this); Childrens.append(SaveButton); local ResetButton = LenheartNewUI_ButtonText(310, 84, 15, "重置"); ResetButton.DWidth = -19; ResetButton.Width = 36; ResetButton.SetTextOffset(-12, 1); ResetButton.OnClick = function() { if (CurrentSelect == null) { return; } SendPackEx({ op = 21015005, Slot = CurrentSelect, }) foreach(SlotObj in ItemSlotList) { SlotObj.RemoveItem(); } }.bindenv(this); Childrens.append(ResetButton); for (local i = 0; i< 20; i++) { local Obtn = OutfitSystemC_Button(10 + (i % 10) * 30, 56 + (i / 10) * 30, 3, i); Obtn.OnClickEx = function(Obj, Idx) { CurrentSelect = Idx; SendPackEx({ op = 21015003, Slot = Idx }) }.bindenv(this); AddChild(Obtn); } ItemSlotList = []; local ItemObject = Rindro_Item(); ItemObject.LoadById(3037); for (local i = 0; i< ItemSlotPos.len(); i++) { local XPos = ItemSlotPos[i][0]; local YPos = ItemSlotPos[i][1]; local ItemSlot = LenheartNewUI_ItemSlot(XPos, YPos); // ItemSlot.SetItem(ItemObject); ItemSlotList.append(ItemSlot); AddChild(ItemSlot); } } //绘制主界面 function DrawMain(obj) { Img.DrawPng(0, X, Y); L_sq_DrawCode("换装配置", X + 152, Y + 3, sq_RGBA(230, 200, 155, 255), 0, 1); L_sq_DrawCode("装备槽位", X + 48, Y + 135, sq_RGBA(150, 150, 150, 255), 0, 1); L_sq_DrawCode("时装槽位", X + 188, Y + 135, sq_RGBA(150, 150, 150, 255), 0, 1); L_sq_DrawCode("宠物", X + 308, Y + 135, sq_RGBA(150, 150, 150, 255), 0, 1); Rindro_Image_GlobalMap["lenheartui"].DrawPng(469 + (InstructionsIsHover ? 1 : 0), X + 335, Y + 266); if (CurrentSelect != null) { Rindro_Image_GlobalMap["lenheartui"].DrawPng(425, X + 12 + (CurrentSelect % 10) * 30, Y + 38 + (CurrentSelect / 10) * 30); } } function Show(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); } function TopShow(obj) { if(InstructionsIsHover){ local XOffset = 8; local YOffset = 192; DrawNineBox(X + XOffset, Y + YOffset, 326, 80, "interface/lenheartwindowcommon.img", 213); L_sq_DrawCode("①选择对应的标签以配置换装配置", X + XOffset + 8, Y + YOffset + 8, sq_RGBA(230, 200, 155, 255), 0, 1); L_sq_DrawCode("②点击记录可以保存当前穿戴的装备,点击重置可以清除配置", X + XOffset + 8, Y + YOffset + 8 + 16, sq_RGBA(230, 200, 155, 255), 0, 1); L_sq_DrawCode("③在对话窗口输入//HZ 1 可以换装1号标签的配置", X + XOffset + 8, Y + YOffset + 8 + 32, sq_RGBA(230, 200, 155, 255), 0, 1); L_sq_DrawCode("④设置快捷喊话可以方便一键切换", X + XOffset + 8, Y + YOffset + 8 + 48, sq_RGBA(230, 200, 155, 255), 0, 1); } } //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y); if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 335, Y + 266, 16, 16)) { InstructionsIsHover = true; } else { InstructionsIsHover = false; } } //读取自身装备并显示在装备槽位 function ReadSelfEquip() { local EquiList = []; for (local i = 0; i< ItemSlotPos.len(); i++) { local Offset = ItemSlotPos[i][2]; if (Offset != null) { local EquipAddress = GetEquip(Offset); if (EquipAddress != null) { local ItemObject = Rindro_Item(); ItemObject.LoadByAddress(EquipAddress); ItemSlotList[i].SetItem(ItemObject); local Info = [ ItemObject.GetIndex(), ItemObject.GetUpgrade(), ItemObject.GetAmplification(), ItemObject.GetForging(), ItemObject.GetEnchanting() ] EquiList.append(Info); } else { EquiList.append([0, 0, 0, 0, 0]); } } else { EquiList.append([0, 0, 0, 0, 0]); } } return EquiList; } function GetEquip(Offset) { local ObjAddress = NativePointer(0x1AB7CDC).readInt(); local EquipAddress = NativePointer(ObjAddress + Offset).readInt(); if (EquipAddress != 0) { local Index = NativePointer(EquipAddress + 0x1C).readInt(); return EquipAddress; } return null; } function InitWindow() { this.CurrentSelect = null; this.Visible = true; foreach(SlotObj in ItemSlotList) { SlotObj.RemoveItem(); } } } L_Windows_List <- []; getroottable().rawdelete("LenheartPluginsInitFlag"); getroottable().rawdelete("EventList_Obj") getroottable().rawdelete("OutfitSystem_Obj"); getroottable().rawdelete("L_Each_Obj"); function Lenheart_OutfitSystem_Fun(obj) { local RootTab = getroottable(); if (!RootTab.rawin("OutfitSystem_Obj")) { RootTab.rawset("OutfitSystem_Obj", true); LenheartNewUI_CreateWindow(OutfitSystemC, "换装系统窗口", 60, 150, 356, 286, 18); } } getroottable()["LenheartFuncTab"].rawset("OutfitSystemFuncN", Lenheart_OutfitSystem_Fun);