| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名:FatalismStone.nut | 
					
						
							|  |  |  | 路径:Project/FatalismStone/FatalismStone.nut | 
					
						
							|  |  |  | 创建日期:2025-06-18	11:00 | 
					
						
							|  |  |  | 文件用途:FatalismStone | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | //魂石list | 
					
						
							|  |  |  | FatalismStoneLst <- null; | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  | FatalismStoneConfig <- null; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | //魂石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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //是否可见 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     // Visible = false; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //Img | 
					
						
							|  |  |  |     Img = null; | 
					
						
							|  |  |  |     //总格子数 | 
					
						
							|  |  |  |     GridCount = 77; | 
					
						
							|  |  |  |     //总穿戴数 | 
					
						
							|  |  |  |     WearCount = 6; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //功能标题 | 
					
						
							|  |  |  |     FunctionTitle = null; | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     //功能页面 | 
					
						
							|  |  |  |     FunctionPage = 0; | 
					
						
							|  |  |  |     //Ani任务队列 | 
					
						
							|  |  |  |     AniQueue = null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     //背包数据 | 
					
						
							|  |  |  |     BackPackData = null; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     //背包页面 | 
					
						
							|  |  |  |     BackpackPage = 0; | 
					
						
							|  |  |  |     //背包页面Tabbars | 
					
						
							|  |  |  |     BackpackPageTabbars = null; | 
					
						
							|  |  |  |     //页面魂石集合 | 
					
						
							|  |  |  |     PageFatalismStoneLst = null; | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     //穿戴魂石集合 | 
					
						
							|  |  |  |     WearFatalismStoneLst = null; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //穿戴页面坐标数组 | 
					
						
							|  |  |  |     WearPagePos = [131, 140, 32, 180, 234, 180, 32, 272, 234, 272, 131, 413]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     //洗练对象 | 
					
						
							|  |  |  |     WashStone = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     //查询魂石背包数据 | 
					
						
							|  |  |  |     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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //背包数据回包 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         RegisterHexPack(21000002, function(Pack) { | 
					
						
							|  |  |  |             local Data = []; | 
					
						
							|  |  |  |             local BackPackSize = Pack.GetInt(); | 
					
						
							|  |  |  |             local BackPackDataBuffer = Pack.GetStream(BackPackSize); | 
					
						
							|  |  |  |             Data.append(BackPackDataBuffer); | 
					
						
							|  |  |  |             local WearSize = Pack.GetInt(); | 
					
						
							|  |  |  |             local WearDataBuffer = Pack.GetStream(WearSize); | 
					
						
							|  |  |  |             Data.append(WearDataBuffer); | 
					
						
							|  |  |  |             BackPackData = FatalismStone_BackPack(); | 
					
						
							|  |  |  |             BackPackData.Deserialize(Data); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |             InitPageFatalismStone(); | 
					
						
							|  |  |  |         }.bindenv(this)); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         //请求魂石数据 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |         QueryFatalismStoneBackpack(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function RegisterWidget() { | 
					
						
							| 
									
										
										
										
											2025-08-27 08:45:37 +08:00
										 |  |  |         //关闭按钮 | 
					
						
							|  |  |  |         local CloseButton = LenheartNewUI_BaseButton(738, 2, 11, 12, "interface/lenheartwindowcommon.img", 276); | 
					
						
							|  |  |  |         CloseButton.OnClick = function() { | 
					
						
							|  |  |  |             this.Visible = false; | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         Childrens.append(CloseButton); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         local WashButton = LenheartNewUI_ButtonText(483, 182, 24, "洗练"); | 
					
						
							|  |  |  |         WashButton.OnClickSound = "ICON_QUICK_SET"; | 
					
						
							|  |  |  |         WashButton.SetTextOffset(9, 1); | 
					
						
							|  |  |  |         WashButton.OnClick = function() { | 
					
						
							|  |  |  |             if (FunctionPage == 0 && WashStone) { | 
					
						
							|  |  |  |                 SendPackEx({ | 
					
						
							|  |  |  |                     op = 21000005, | 
					
						
							|  |  |  |                     uuid = WashStone.Uuid, | 
					
						
							|  |  |  |                     rarity = WashStone.Info["rarity"], | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |                 AniQueue.AddQuest("洗练特效动画", function(Name, Time) { | 
					
						
							|  |  |  |                     local AniPath = "fatalismstone/animation/eff1.ani"; | 
					
						
							|  |  |  |                     local Ani = DrawAniEx(X + 440, Y + 32, AniPath, "魂石洗练特效"); | 
					
						
							|  |  |  |                     if (sq_GetAnimationFrameIndex(Ani) == 15) { | 
					
						
							|  |  |  |                         sq_Rewind(Ani); | 
					
						
							|  |  |  |                         AniQueue.RemoveQuest(Name); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 }.bindenv(this)); | 
					
						
							|  |  |  |                 R_Utils.PlaySound("BUTTON_06"); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         WashButton.SetCallBackFunc(function(Btn) { | 
					
						
							|  |  |  |             if (FunctionPage != 0) Btn.Visible = false; | 
					
						
							|  |  |  |             else Btn.Visible = true; | 
					
						
							|  |  |  |         }.bindenv(this)) | 
					
						
							|  |  |  |         AddChild(WashButton); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //初始化背包 | 
					
						
							|  |  |  |     function InitPageFatalismStone() { | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         if (!BackPackData) return; | 
					
						
							|  |  |  |         //设置需要渲染的当前背包页面 | 
					
						
							|  |  |  |         PageFatalismStoneLst = BackPackData.GetList(BackpackPage); | 
					
						
							|  |  |  |         WearFatalismStoneLst = BackPackData.GetList(3); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //绘制主界面 | 
					
						
							|  |  |  |     function DrawMain(obj) { | 
					
						
							|  |  |  |         Img["main"].DrawPng(0, X, Y); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-27 08:45:37 +08:00
										 |  |  |         L_sq_DrawCode("宿命魂石", X + 362, Y + 3, sq_RGBA(221, 197, 147, 250), 1, 1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |         //绘制自身人物 | 
					
						
							|  |  |  |         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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         //洗练页面 | 
					
						
							|  |  |  |         if (FunctionPage == 0) { | 
					
						
							|  |  |  |             //绘制洗练槽 | 
					
						
							|  |  |  |             Img["main"].DrawPng(2, X + 500, Y + 90); | 
					
						
							|  |  |  |             if (WashStone) { | 
					
						
							|  |  |  |                 local NowCultivationDegree = "当前魂石洗练度: " + WashStone.Info.cultivationDegree.tostring(); | 
					
						
							|  |  |  |                 local NeedStkStr = FatalismStoneConfig["wash_cost"][WashStone.Info["rarity"]] + "个"; | 
					
						
							|  |  |  |                 L_sq_DrawCode("当前魂石洗练度: ", X + 471, Y + 140, sq_RGBA(174, 174, 174, 250), 1, 1); | 
					
						
							|  |  |  |                 L_sq_DrawCode("洗练所需魂屑: ", X + 473, Y + 160, sq_RGBA(174, 174, 174, 250), 1, 1); | 
					
						
							|  |  |  |                 L_sq_DrawCode(WashStone.Info.cultivationDegree.tostring() + "%", X + 560, Y + 140, sq_RGBA(104, 237, 161, 250), 1, 1); | 
					
						
							|  |  |  |                 L_sq_DrawCode(NeedStkStr, X + 552, Y + 160, sq_RGBA(104, 237, 161, 250), 1, 1); | 
					
						
							|  |  |  |                 WashStone.Show(obj, X + 505, Y + 95); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function Show(obj) { | 
					
						
							|  |  |  |         DrawMain(obj); | 
					
						
							|  |  |  |         LenheartNewUI_Windows.Show(obj); | 
					
						
							|  |  |  |         //绘制魂石 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         //背包中的魂石 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |         if (PageFatalismStoneLst) { | 
					
						
							|  |  |  |             foreach(Pos, Stone in PageFatalismStoneLst) { | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |                 local XPos = 310 + (Pos % 11 * 39); | 
					
						
							|  |  |  |                 local YPos = 260 + (Pos / 11 * 35); | 
					
						
							|  |  |  |                 if (Stone) Stone.Show(obj, X + XPos, Y + YPos); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         //穿戴的魂石 | 
					
						
							|  |  |  |         if (WearFatalismStoneLst) { | 
					
						
							|  |  |  |             foreach(Pos, Stone in WearFatalismStoneLst) { | 
					
						
							|  |  |  |                 local XPos = WearPagePos[Pos * 2]; | 
					
						
							|  |  |  |                 local YPos = WearPagePos[Pos * 2 + 1]; | 
					
						
							|  |  |  |                 XPos += 5; | 
					
						
							|  |  |  |                 YPos += 5; | 
					
						
							|  |  |  |                 if (Stone) Stone.Show(obj, X + XPos, Y + YPos); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         AniQueue.Run(); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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) { | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |             local XPos = 310 + (Pos % 11 * 39); | 
					
						
							|  |  |  |             local YPos = 260 + (Pos / 11 * 35); | 
					
						
							|  |  |  |             if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 31, 31)) { | 
					
						
							|  |  |  |                 //绘制悬停框 | 
					
						
							|  |  |  |                 L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |                 Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + XPos + 1, Y + YPos + 1); | 
					
						
							|  |  |  |                 L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |                 if (Stone && !DragObj) Stone.HoverShow(X + XPos + 31, Y + YPos); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         //魂石穿戴的悬停绘制 | 
					
						
							|  |  |  |         if (WearFatalismStoneLst) { | 
					
						
							|  |  |  |             foreach(Pos, Stone in WearFatalismStoneLst) { | 
					
						
							|  |  |  |                 local XPos = WearPagePos[Pos * 2]; | 
					
						
							|  |  |  |                 local YPos = WearPagePos[Pos * 2 + 1]; | 
					
						
							|  |  |  |                 XPos += 5; | 
					
						
							|  |  |  |                 YPos += 5; | 
					
						
							|  |  |  |                 if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 31, 31)) { | 
					
						
							|  |  |  |                     //绘制悬停框 | 
					
						
							|  |  |  |                     L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |                     Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + XPos + 1, Y + YPos + 1); | 
					
						
							|  |  |  |                     L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |                     if (Stone && !DragObj) Stone.HoverShow(X + XPos + 31, Y + YPos); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         //绘制拖拽的魂石 | 
					
						
							|  |  |  |         if (DragObj) { | 
					
						
							|  |  |  |             DragObj.Show(obj, IMouse.GetXPos() - 15, IMouse.GetYPos() - 15); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //当前拖拽的物品对象 | 
					
						
							|  |  |  |     DragObj = null; | 
					
						
							|  |  |  |     DragOldPos = null; | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     DragType = null; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //鼠标左键按下回调 | 
					
						
							|  |  |  |     function OnMouseLbDown(MousePos_X, MousePos_Y) { | 
					
						
							|  |  |  |         LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         if (!PageFatalismStoneLst) return; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |         foreach(Pos, Stone in PageFatalismStoneLst) { | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |             local XPos = 310 + (Pos % 11 * 39); | 
					
						
							|  |  |  |             local YPos = 260 + (Pos / 11 * 35); | 
					
						
							|  |  |  |             if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { | 
					
						
							|  |  |  |                 if (Stone && Stone.isSuccess) { | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |                     DragObj = Stone; | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |                     PageFatalismStoneLst[Pos] = null; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |                     DragOldPos = Pos; | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |                     DragType = 1; //背包中的拖拽 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (WearFatalismStoneLst) { | 
					
						
							|  |  |  |             foreach(Pos, Stone in WearFatalismStoneLst) { | 
					
						
							|  |  |  |                 local XPos = WearPagePos[Pos * 2]; | 
					
						
							|  |  |  |                 local YPos = WearPagePos[Pos * 2 + 1]; | 
					
						
							|  |  |  |                 XPos += 5; | 
					
						
							|  |  |  |                 YPos += 5; | 
					
						
							|  |  |  |                 if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { | 
					
						
							|  |  |  |                     if (Stone) { | 
					
						
							|  |  |  |                         DragObj = Stone; | 
					
						
							|  |  |  |                         WearFatalismStoneLst[Pos] = null; | 
					
						
							|  |  |  |                         DragOldPos = Pos + (GridCount * 3); | 
					
						
							|  |  |  |                         DragType = 0; //身上的拖拽 | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //鼠标左键抬起回调 | 
					
						
							|  |  |  |     function OnMouseLbUp(MousePos_X, MousePos_Y) { | 
					
						
							|  |  |  |         LenheartNewUI_BaseWindow.OnMouseLbUp(MousePos_X, MousePos_Y); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         if (PageFatalismStoneLst) { | 
					
						
							|  |  |  |             foreach(Pos, Stone in PageFatalismStoneLst) { | 
					
						
							|  |  |  |                 local XPos = 310 + (Pos % 11 * 39); | 
					
						
							|  |  |  |                 local YPos = 260 + (Pos / 11 * 35); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |                 if (DragObj) { | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |                     if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { | 
					
						
							|  |  |  |                         StoneMoveLogic(Pos, Stone); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (WearFatalismStoneLst) { | 
					
						
							|  |  |  |             foreach(Pos, Stone in WearFatalismStoneLst) { | 
					
						
							|  |  |  |                 local XPos = WearPagePos[Pos * 2]; | 
					
						
							|  |  |  |                 local YPos = WearPagePos[Pos * 2 + 1]; | 
					
						
							|  |  |  |                 XPos += 5; | 
					
						
							|  |  |  |                 YPos += 5; | 
					
						
							|  |  |  |                 if (DragObj) { | 
					
						
							|  |  |  |                     if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { | 
					
						
							|  |  |  |                         StoneMoveLogic((GridCount * 3) + Pos, Stone); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         //洗练的区域 | 
					
						
							|  |  |  |         if (FunctionPage == 0 && sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + 500, Y + 90, 42, 42)) { | 
					
						
							|  |  |  |             if (DragObj) { | 
					
						
							|  |  |  |                 WashStone = DragObj; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         if (DragObj) { | 
					
						
							|  |  |  |             //播放移动声音 | 
					
						
							|  |  |  |             R_Utils.PlaySound(DragObj.Info["move wav"]); | 
					
						
							|  |  |  |             //放回原位 | 
					
						
							|  |  |  |             if (DragType == 1) PageFatalismStoneLst[DragOldPos] = DragObj; | 
					
						
							|  |  |  |             else if (DragType == 0) WearFatalismStoneLst[DragOldPos - (GridCount * 3)] = DragObj; | 
					
						
							|  |  |  |             DragObj = null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     function StoneMoveLogic(Pos, Stone) { | 
					
						
							|  |  |  |         local OldEType = DragObj.Stone_Type; //老装备类型 | 
					
						
							|  |  |  |         local NewEType; //新装备类型 | 
					
						
							|  |  |  |         //如果新位置有魂石 获取到新的穿戴类型 | 
					
						
							|  |  |  |         if (Stone) NewEType = Stone.Stone_Type; | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |             //这是往身上拖 | 
					
						
							|  |  |  |             if (Pos >= GridCount * 3) { | 
					
						
							|  |  |  |                 local RealPos = Pos - (GridCount * 3); | 
					
						
							|  |  |  |                 if (RealPos == 0) NewEType = 0; | 
					
						
							|  |  |  |                 if (RealPos >= 1 && RealPos <= 4) NewEType = 1; | 
					
						
							|  |  |  |                 if (RealPos == 5) NewEType = 2; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             //这是往背包拖 | 
					
						
							|  |  |  |             else { | 
					
						
							|  |  |  |                 NewEType = BackpackPage; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //如果两个类型相同则进行交换  相同位置也不发包 | 
					
						
							|  |  |  |         if (OldEType == NewEType && DragOldPos != Pos) { | 
					
						
							|  |  |  |             //老装备的页面位置 | 
					
						
							|  |  |  |             SendPackEx({ | 
					
						
							|  |  |  |                 op = 21000003, | 
					
						
							|  |  |  |                 oldtype = DragType == 1 ? BackpackPage : 3, | 
					
						
							|  |  |  |                 oldpos = DragType == 1 ? DragOldPos : DragOldPos - (GridCount * 3), | 
					
						
							|  |  |  |                 newtype = Pos >= (GridCount * 3) ? 3 : BackpackPage, | 
					
						
							|  |  |  |                 newpos = Pos >= (GridCount * 3) ? Pos - (GridCount * 3) : Pos | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |             QueryFatalismStoneBackpack(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //计算全身属性 | 
					
						
							|  |  |  |     function StatisticalAttribute() { | 
					
						
							|  |  |  |         local AttributeTable = {}; | 
					
						
							|  |  |  |         local WearStoneList = BackPackData.GetList(3); | 
					
						
							|  |  |  |         for (local i = 0; i< WearStoneList.len(); i++) { | 
					
						
							|  |  |  |             local StoneObj = WearStoneList[i]; | 
					
						
							|  |  |  |             if (StoneObj) { | 
					
						
							|  |  |  |                 local Att = StoneObj.GetAttribute(); | 
					
						
							|  |  |  |                 if (Att) { | 
					
						
							|  |  |  |                     foreach(key, value in Att) { | 
					
						
							|  |  |  |                         local RealValue = value; | 
					
						
							|  |  |  |                         if (typeof RealValue == "array") RealValue = RealValue[0]; | 
					
						
							|  |  |  |                         if (!AttributeTable.rawin(key)) AttributeTable.rawset(key, value); | 
					
						
							|  |  |  |                         else AttributeTable.rawset(key, AttributeTable.rawget(key) + value); | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         //记录最新属性数据 | 
					
						
							|  |  |  |         if ("LenheartAttributesTable" in getroottable()) { | 
					
						
							|  |  |  |             local T = getroottable()["LenheartAttributesTable"]; | 
					
						
							|  |  |  |             T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             local T = {}; | 
					
						
							|  |  |  |             T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); | 
					
						
							|  |  |  |             getroottable().rawset("LenheartAttributesTable", T); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //逻辑入口 | 
					
						
							|  |  |  |     function Proc(obj) { | 
					
						
							|  |  |  |         LenheartNewUI_Windows.SyncPos(X, Y); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |     //初始化PVF魂石列表 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     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); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         FatalismStoneConfig = Rindro_Script.GetFileData("fatalismstone/fatalismstone.etc", function(DataTable, Data) { | 
					
						
							|  |  |  |             while (!Data.Eof()) { | 
					
						
							|  |  |  |                 local Str = Data.Get(); | 
					
						
							|  |  |  |                 if (Str == "[wash item]") { | 
					
						
							|  |  |  |                     DataTable.wash_item <- Data.Get(); | 
					
						
							|  |  |  |                 } else if (Str == "[wash cost]") { | 
					
						
							|  |  |  |                     DataTable.wash_cost <- [Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get()]; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     function InitImg() { | 
					
						
							|  |  |  |         Img = {}; | 
					
						
							|  |  |  |         Img["main"] <- Rindro_Image("hud/fatalism_stone.img"); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         AniQueue = QuestQueue(); | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function OpenCallBack() { | 
					
						
							|  |  |  |         Visible = true; | 
					
						
							|  |  |  |         QueryFatalismStoneBackpack(); | 
					
						
							| 
									
										
										
										
											2025-10-14 09:17:56 +08:00
										 |  |  |         WashStone = null; | 
					
						
							| 
									
										
										
										
											2025-06-30 00:25:43 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-16 15:21:32 +08:00
										 |  |  | getroottable()["LenheartFuncTab"].rawset("FatalismStoneFuncN", Lenheart_FatalismStone_Fun); |