417 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			417 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:FatalismStone.nut | ||
|  | 路径:Project/FatalismStone/FatalismStone.nut | ||
|  | 创建日期:2025-06-18	11:00 | ||
|  | 文件用途:FatalismStone | ||
|  | */ | ||
|  | //魂石list | ||
|  | FatalismStoneLst <- null; | ||
|  | //魂石Img主体 | ||
|  | FatalismStone_StoneImg <- {}; | ||
|  | FatalismStone_StoneImg["icon_Frame"] <- Rindro_Image("interface2/rindro_reward.img"); | ||
|  | FatalismStone_StoneImg["fatalism_stone_progressbar"] <- Rindro_Image("hud/fatalism_stone_progressbar.img"); | ||
|  | 
 | ||
|  | class FatalismStoneC extends LenheartNewUI_Windows { | ||
|  |     //调试模式 | ||
|  |     // DeBugMode = true; | ||
|  | 
 | ||
|  |     //不是窗口 | ||
|  |     // NoWindow = true; | ||
|  | 
 | ||
|  |     //是否可见 | ||
|  |     Visible = false; | ||
|  | 
 | ||
|  |     //Img | ||
|  |     Img = null; | ||
|  | 
 | ||
|  |     //属性数据位数 | ||
|  |     AttrCount = 2; | ||
|  |     //总格子数 | ||
|  |     GridCount = 77; | ||
|  |     //总穿戴数 | ||
|  |     WearCount = 6; | ||
|  | 
 | ||
|  |     //功能标题 | ||
|  |     FunctionTitle = null; | ||
|  | 
 | ||
|  |     //背包页面 | ||
|  |     BackpackPage = 0; | ||
|  |     //背包页面Tabbars | ||
|  |     BackpackPageTabbars = null; | ||
|  |     //魂石数据 | ||
|  |     FatalismStoneData = null; | ||
|  |     //页面魂石集合 | ||
|  |     PageFatalismStoneLst = null; | ||
|  | 
 | ||
|  | 
 | ||
|  |     //穿戴页面坐标数组 | ||
|  |     WearPagePos = [131, 140, 32, 180, 234, 180, 32, 272, 234, 272, 131, 413]; | ||
|  | 
 | ||
|  | 
 | ||
|  |     //查询魂石背包数据 | ||
|  |     function QueryFatalismStoneBackpack() { | ||
|  |         SendPackEx({ | ||
|  |             op = 21000001, | ||
|  |         }) | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { | ||
|  |         Childrens = []; | ||
|  |         FunctionTitle = []; | ||
|  |         BackpackPageTabbars = []; | ||
|  |         //注册控件 | ||
|  |         RegisterWidget(); | ||
|  | 
 | ||
|  |         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); | ||
|  | 
 | ||
|  |         InitImg(); | ||
|  | 
 | ||
|  | 
 | ||
|  |         //初始化魂石列表 | ||
|  |         InitFatalismStoneLst(); | ||
|  | 
 | ||
|  |         //背包数据回包 | ||
|  |         RegisterPack(21000002, function(Chunk) { | ||
|  |             local Jso = Json.Decode(Chunk); | ||
|  |             FatalismStoneData = []; | ||
|  |             //三个背包页 | ||
|  |             for (local j = 0; j< 3; j++) { | ||
|  |                 local Buf = []; | ||
|  |                 //每个背包页77格道具 | ||
|  |                 for (local i = 0; i< GridCount; i++) { | ||
|  |                     local Obj = Jso.BackPackData[i + (j * GridCount)]; | ||
|  |                     local _Id = Obj.id; | ||
|  |                     local _CultivationDegree = Obj.cultivationDegree; | ||
|  |                     Buf.append({ | ||
|  |                         Id = _Id, | ||
|  |                         CultivationDegree = _CultivationDegree / 100.0, | ||
|  |                         XPos = 310 + (i % 11 * 39), | ||
|  |                         YPos = 260 + (i / 11 * 35), | ||
|  |                         StoneType = j | ||
|  |                     }); | ||
|  |                 } | ||
|  |                 FatalismStoneData.append(Buf); | ||
|  |             } | ||
|  |             //穿戴页 | ||
|  |             local WearBuf = []; | ||
|  |             for (local i = 0; i< WearCount; i++) { | ||
|  |                 local Obj = Jso.WearData[i]; | ||
|  | 
 | ||
|  |                 local _Id = Obj.id; | ||
|  |                 local _CultivationDegree = Obj.cultivationDegree; | ||
|  | 
 | ||
|  |                 local _Xpos = WearPagePos[i * 2]; | ||
|  |                 local _Ypos = WearPagePos[i * 2 + 1]; | ||
|  |                 _Xpos += 5; | ||
|  |                 _Ypos += 5; | ||
|  | 
 | ||
|  |                 local infoBuf = { | ||
|  |                     Id = _Id, | ||
|  |                     CultivationDegree = _CultivationDegree / 100.0, | ||
|  |                     XPos = _Xpos, | ||
|  |                     YPos = _Ypos, | ||
|  |                 }; | ||
|  |                 if (i == 0) infoBuf.StoneType <- 0; | ||
|  |                 else if (i >= 1 && i <= 4) infoBuf.StoneType <- 1; | ||
|  |                 else if (i == 5) infoBuf.StoneType <- 2; | ||
|  |                 WearBuf.append(infoBuf); | ||
|  |             } | ||
|  |             FatalismStoneData.append(WearBuf); | ||
|  |             InitPageFatalismStone(); | ||
|  |         }.bindenv(this)); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         QueryFatalismStoneBackpack(); | ||
|  |     } | ||
|  | 
 | ||
|  |     function RegisterWidget() { | ||
|  | 
 | ||
|  |         // //关闭按钮 | ||
|  |         // local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276); | ||
|  |         // CloseButton.OnClick = function() { | ||
|  |         //     this.Visible = false; | ||
|  |         // }.bindenv(this); | ||
|  |         // Childrens.append(CloseButton); | ||
|  | 
 | ||
|  |         local FuncTabbar1 = LenheartNewUI_TabbarsText(302, 27, "洗练"); | ||
|  |         FuncTabbar1.State = 1; | ||
|  |         AddChild(FuncTabbar1); | ||
|  |         FuncTabbar1.OnClick = function() { | ||
|  | 
 | ||
|  |         }.bindenv(this); | ||
|  |         FunctionTitle.append(FuncTabbar1); | ||
|  | 
 | ||
|  |         local FuncTabbar2 = LenheartNewUI_TabbarsText(364, 27, "合成"); | ||
|  |         AddChild(FuncTabbar2); | ||
|  |         FuncTabbar2.OnClick = function() { | ||
|  | 
 | ||
|  |         }.bindenv(this); | ||
|  |         FunctionTitle.append(FuncTabbar2); | ||
|  | 
 | ||
|  |         local FuncTabbar3 = LenheartNewUI_TabbarsText(426, 27, "分解"); | ||
|  |         AddChild(FuncTabbar3); | ||
|  |         FuncTabbar3.OnClick = function() { | ||
|  | 
 | ||
|  |         }.bindenv(this); | ||
|  |         FunctionTitle.append(FuncTabbar3); | ||
|  | 
 | ||
|  |         local FuncTabbar4 = LenheartNewUI_TabbarsText(488, 27, "注魂"); | ||
|  |         AddChild(FuncTabbar4); | ||
|  |         FuncTabbar4.OnClick = function() { | ||
|  | 
 | ||
|  |         }.bindenv(this); | ||
|  |         FunctionTitle.append(FuncTabbar4); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         local Tabbars3 = LenheartNewUI_TabbarsText(302, 235, "天魂石"); | ||
|  |         Tabbars3.SetTextOffset(13, 4); | ||
|  |         Tabbars3.State = 1; | ||
|  |         AddChild(Tabbars3); | ||
|  |         Tabbars3.OnClickEx = function(Button) { | ||
|  |             foreach(button in BackpackPageTabbars) { | ||
|  |                 button.State = 0; | ||
|  |             } | ||
|  |             Button.State = 1; | ||
|  |             BackpackPage = 0; | ||
|  |             InitPageFatalismStone(); | ||
|  |         }.bindenv(this); | ||
|  |         BackpackPageTabbars.append(Tabbars3); | ||
|  | 
 | ||
|  |         local Tabbars4 = LenheartNewUI_TabbarsText(364, 235, "人魂石"); | ||
|  |         Tabbars4.SetTextOffset(13, 4); | ||
|  |         AddChild(Tabbars4); | ||
|  |         Tabbars4.OnClickEx = function(Button) { | ||
|  |             foreach(button in BackpackPageTabbars) { | ||
|  |                 button.State = 0; | ||
|  |             } | ||
|  |             Button.State = 1; | ||
|  |             BackpackPage = 1; | ||
|  |             InitPageFatalismStone(); | ||
|  |         }.bindenv(this); | ||
|  |         BackpackPageTabbars.append(Tabbars4); | ||
|  | 
 | ||
|  |         local Tabbars5 = LenheartNewUI_TabbarsText(426, 235, "地魂石"); | ||
|  |         Tabbars5.SetTextOffset(13, 4); | ||
|  |         AddChild(Tabbars5); | ||
|  |         Tabbars5.OnClickEx = function(Button) { | ||
|  |             foreach(button in BackpackPageTabbars) { | ||
|  |                 button.State = 0; | ||
|  |             } | ||
|  |             Button.State = 1; | ||
|  |             BackpackPage = 2; | ||
|  |             InitPageFatalismStone(); | ||
|  |         }.bindenv(this); | ||
|  |         BackpackPageTabbars.append(Tabbars5); | ||
|  |     } | ||
|  | 
 | ||
|  |     //初始化背包 | ||
|  |     function InitPageFatalismStone() { | ||
|  |         // if (!BackpackData || BackpackData.len() == 0) return; | ||
|  |         if (!FatalismStoneData) return; | ||
|  |         local SubBackPack = FatalismStoneData[BackpackPage]; | ||
|  |         local ItArr = SubBackPack; | ||
|  |         foreach(value in FatalismStoneData[3]) { | ||
|  |             ItArr.append(value); | ||
|  |         } | ||
|  |         PageFatalismStoneLst = []; | ||
|  |         foreach(info in ItArr) { | ||
|  |             local StoneBuf; | ||
|  |             if (!info.Id) StoneBuf = FatalismStone_Stone(null); | ||
|  |             else StoneBuf = FatalismStone_Stone(info.Id); | ||
|  |             StoneBuf.InitializeData(info); | ||
|  |             PageFatalismStoneLst.append(StoneBuf); | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         //计算全身的属性 | ||
|  |         local AttributeTable = {}; | ||
|  |         for (local i = GridCount; i< GridCount + WearCount; i++) { | ||
|  |             local StoneObj = PageFatalismStoneLst[i]; | ||
|  |             local Att = StoneObj.GetAttribute(); | ||
|  |             if (Att) { | ||
|  |                 foreach(key, value in Att) { | ||
|  |                     if (!AttributeTable.rawin(key)) AttributeTable.rawset(key, value); | ||
|  |                     else AttributeTable.rawset(key, AttributeTable.rawget(key) + value); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         //记录最新属性数据 | ||
|  |         if ("LenheartAttributesTable" in getroottable()) { | ||
|  |             local T = getroottable()["LenheartAttributesTable"]; | ||
|  |             T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); | ||
|  |         } else { | ||
|  |             local T = {}; | ||
|  |             T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); | ||
|  |             getroottable().rawset("LenheartAttributesTable", T); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制主界面 | ||
|  |     function DrawMain(obj) { | ||
|  |         Img["main"].DrawPng(0, X, Y); | ||
|  | 
 | ||
|  |         //绘制自身人物 | ||
|  |         local charAni = sq_GetCNRDObjectToSQRCharacter(obj).sq_GetRestAni(); | ||
|  |         sq_AnimationProc(charAni); | ||
|  |         sq_drawCurrentFrame(charAni, X + 153, Y + 370, false); | ||
|  | 
 | ||
|  |         //绘制右侧背景 | ||
|  |         L_sq_DrawWindow(X + 300, Y + 44, 420, 160, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); //上背景框 | ||
|  |         L_sq_DrawWindow(X + 300, Y + 253, 420, 220, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); //下背景框 | ||
|  | 
 | ||
|  |         Img["main"].DrawPng(1, X + 309, Y + 259); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     function Show(obj) { | ||
|  |         DrawMain(obj); | ||
|  |         LenheartNewUI_Windows.Show(obj); | ||
|  |         //绘制魂石 | ||
|  |         if (PageFatalismStoneLst) { | ||
|  |             foreach(Pos, Stone in PageFatalismStoneLst) { | ||
|  |                 Stone.Show(obj, X + Stone.XPos, Y + Stone.YPos); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function TopShow(obj) { | ||
|  |         LenheartNewUI_Windows.TopShow(obj); | ||
|  |         //还没有初始化数据的时候直接返回 | ||
|  |         if (!PageFatalismStoneLst) return; | ||
|  |         local MousePos_X = IMouse.GetXPos(); | ||
|  |         local MousePos_Y = IMouse.GetYPos(); | ||
|  |         //魂石的悬停绘制 | ||
|  |         foreach(Pos, Stone in PageFatalismStoneLst) { | ||
|  |             if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 31, 31)) { | ||
|  |                 Stone.HoverShow(X + Stone.XPos + 31, Y + Stone.YPos); | ||
|  |             } | ||
|  |         } | ||
|  |         //绘制拖拽的魂石 | ||
|  |         if (DragObj) { | ||
|  |             DragObj.Show(obj, IMouse.GetXPos() - 15, IMouse.GetYPos() - 15); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //鼠标右键按下回调 | ||
|  |     function OnMouseRbDown(MousePos_X, MousePos_Y) { | ||
|  |         LenheartNewUI_BaseWindow.OnMouseRbDown(MousePos_X, MousePos_Y); | ||
|  |         if (PageFatalismStoneLst) { | ||
|  |             foreach(Pos, Stone in PageFatalismStoneLst) { | ||
|  |                 if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 31, 31)) { | ||
|  |                     // //发送穿戴装备包 | ||
|  |                     // SendPackEx({ | ||
|  |                     //     op = 21000003, | ||
|  |                     //     type = BackpackPage, | ||
|  |                     //     pos = Pos | ||
|  |                     // }) | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //当前拖拽的物品对象 | ||
|  |     DragObj = null; | ||
|  |     DragOldPos = null; | ||
|  | 
 | ||
|  |     //鼠标左键按下回调 | ||
|  |     function OnMouseLbDown(MousePos_X, MousePos_Y) { | ||
|  |         LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y); | ||
|  |         foreach(Pos, Stone in PageFatalismStoneLst) { | ||
|  |             if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 39, 35)) { | ||
|  |                 if (Stone.isSuccess) { | ||
|  |                     DragObj = Stone; | ||
|  |                     PageFatalismStoneLst[Pos] = FatalismStone_Stone(null); | ||
|  |                     PageFatalismStoneLst[Pos].InitializeData(DragObj.BackupInfo); | ||
|  |                     DragOldPos = Pos; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //鼠标左键抬起回调 | ||
|  |     function OnMouseLbUp(MousePos_X, MousePos_Y) { | ||
|  |         LenheartNewUI_BaseWindow.OnMouseLbUp(MousePos_X, MousePos_Y); | ||
|  |         if (!PageFatalismStoneLst) return; | ||
|  |         foreach(Pos, Stone in PageFatalismStoneLst) { | ||
|  |             if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 39, 35)) { | ||
|  |                 if (DragObj) { | ||
|  |                     //获取到旧的穿戴类型 | ||
|  |                     local OldEType = DragObj.Stone_Type; | ||
|  |                     //获取到新的穿戴类型 | ||
|  |                     local NewEType = Stone.Stone_Type; | ||
|  | 
 | ||
|  |                     //如果两个类型相同则进行交换  相同位置也不发包 | ||
|  |                     if (OldEType == NewEType && DragOldPos != Pos) { | ||
|  |                         SendPackEx({ | ||
|  |                             op = 21000003, | ||
|  |                             oldtype = DragOldPos >= GridCount ? -1 : BackpackPage, | ||
|  |                             oldpos = DragOldPos >= GridCount ? (DragOldPos - GridCount) : DragOldPos, | ||
|  |                             newtype = Pos >= GridCount ? -1 : BackpackPage, | ||
|  |                             newpos = Pos >= GridCount ? (Pos - GridCount) : Pos | ||
|  |                         }) | ||
|  |                     } | ||
|  | 
 | ||
|  |                     //播放移动声音 | ||
|  |                     R_Utils.PlaySound(DragObj.Info["move wav"]); | ||
|  | 
 | ||
|  |                     //放回原位 | ||
|  |                     PageFatalismStoneLst[DragOldPos] = DragObj; | ||
|  |                     DragObj = null; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //逻辑入口 | ||
|  |     function Proc(obj) { | ||
|  |         LenheartNewUI_Windows.SyncPos(X, Y); | ||
|  |     } | ||
|  | 
 | ||
|  |     function InitFatalismStoneLst() { | ||
|  |         FatalismStoneLst = {}; | ||
|  |         Rindro_Script.GetFileData("fatalismstone/fatalismstone.lst", function(DataTable, Data) { | ||
|  |             while (!Data.Eof()) { | ||
|  |                 local Id = Data.Get(); | ||
|  |                 local Path = Data.Get(); | ||
|  |                 FatalismStoneLst.rawset(Id, Path); | ||
|  |             } | ||
|  |         }); | ||
|  |     } | ||
|  | 
 | ||
|  |     function InitImg() { | ||
|  |         Img = {}; | ||
|  |         Img["main"] <- Rindro_Image("hud/fatalism_stone.img"); | ||
|  |     } | ||
|  | 
 | ||
|  |     function OpenCallBack() { | ||
|  |         Visible = true; | ||
|  |         QueryFatalismStoneBackpack(); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | L_Windows_List <- []; | ||
|  | getroottable().rawdelete("LenheartPluginsInitFlag"); | ||
|  | getroottable().rawdelete("EventList_Obj") | ||
|  | getroottable().rawdelete("FatalismStone_Obj"); | ||
|  | 
 | ||
|  | function Lenheart_FatalismStone_Fun(obj) { | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("FatalismStone_Obj")) { | ||
|  |         RootTab.rawset("FatalismStone_Obj", true); | ||
|  |         local Win = LenheartNewUI_CreateWindow(FatalismStoneC, "宿命魂石窗口", ((getroottable().Rindro_Scr_Width - 753) / 2).tointeger(), 35, 753, 518, 20); | ||
|  | 
 | ||
|  |         EventList_Obj.AddEvent("宿命魂石", 280, Win, "interface2/hud/information_button/information_button_cn.img"); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | getroottable()["LenheartFuncTab"].rawset("FatalismStoneFuncN", Lenheart_FatalismStone_Fun); | ||
|  | 
 |