| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名:HudUi.nut | 
					
						
							|  |  |  | 路径:Project/HudUi/HudUi.nut | 
					
						
							|  |  |  | 创建日期:2024-08-27	22:12 | 
					
						
							|  |  |  | 文件用途:界面UI | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class HudUiC extends LenheartNewUI_Windows { | 
					
						
							|  |  |  |     //调试模式 | 
					
						
							|  |  |  |     // DeBugMode = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //不是窗口 | 
					
						
							|  |  |  |     NoWindow = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //是否可见 | 
					
						
							|  |  |  |     // Visible = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //球Ani | 
					
						
							|  |  |  |     Hp_BallAni = null; | 
					
						
							|  |  |  |     Mp_BallAni = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //活动图标是否展开Flag | 
					
						
							|  |  |  |     EventListShowFlag = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //最高等级 | 
					
						
							|  |  |  |     MaxLevel = 86; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //我的骑乘对象 | 
					
						
							|  |  |  |     MyRidingObject = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //生命损失数组 | 
					
						
							|  |  |  |     Lenheart_100UI_HpDamageArr = null; | 
					
						
							|  |  |  |     //生命损失标志 | 
					
						
							|  |  |  |     Lenheart_100UI_HpDamageRateFlag = null; | 
					
						
							|  |  |  |     //生命损失特效 | 
					
						
							|  |  |  |     Lenheart_100UI_HpDamageEff = null; | 
					
						
							|  |  |  |     //魔法损失数组 | 
					
						
							|  |  |  |     Lenheart_100UI_MpDamageArr = null; | 
					
						
							|  |  |  |     //魔法损失标志 | 
					
						
							|  |  |  |     Lenheart_100UI_MpDamageRateFlag = null; | 
					
						
							|  |  |  |     //魔法损失特效 | 
					
						
							|  |  |  |     Lenheart_100UI_MpDamageEff = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //修补内存 | 
					
						
							|  |  |  |     function FixMemory() { | 
					
						
							|  |  |  |         // 干掉nut初始化基础技能栏坐标 | 
					
						
							|  |  |  |         L_sq_WAB(0x4B3239, 0xEB); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //右上角绿色小圆球 | 
					
						
							|  |  |  |         L_sq_WA(0x00E6D873, 1000); | 
					
						
							|  |  |  |         //广播黑条 | 
					
						
							|  |  |  |         L_sq_WA(0x01AF4968, 0); | 
					
						
							|  |  |  |         //格兰背景 | 
					
						
							|  |  |  |         L_sq_WA(0x004CA0B3, 850); | 
					
						
							|  |  |  |         L_sq_WA(0x004BB768, 850); | 
					
						
							|  |  |  |         //副本名称 | 
					
						
							|  |  |  |         L_sq_WA(0x004BB872, 850); | 
					
						
							|  |  |  |         L_sq_WA(0x004BB850, 850); | 
					
						
							|  |  |  |         //城镇名称 | 
					
						
							|  |  |  |         L_sq_WA(0x004CA27C, 850); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-27 14:04:23 +08:00
										 |  |  |         //城镇过场Tips背景 | 
					
						
							|  |  |  |         L_sq_WA(0x004580FD, 400 + 133); | 
					
						
							|  |  |  |         //城镇过场Tips文本 | 
					
						
							|  |  |  |         L_sq_WA(0x004581DD, 400 + 133); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //头顶滚动公告 | 
					
						
							|  |  |  |         L_sq_WAB(0x11FA640, 0xC3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //物品栏 | 
					
						
							|  |  |  |         for (local i = 0; i< 6; i++) { | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x18 + (i * 0x4)) + 0x14, 136 + (i * 31)); | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x18 + (i * 0x4)) + 0x18, 569); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //技能栏 | 
					
						
							| 
									
										
										
										
											2025-05-27 21:24:22 +08:00
										 |  |  |         for (local i = 0; i< 7; i++) { | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x14, 433 + (i * 31)); | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x18, 565); | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x14, 433 + (i * 31)); | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x18, 534); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //功能按键(我的信息, 背包,任务,技能) | 
					
						
							|  |  |  |         for (local i = 0; i< 4; i++) { | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x84 + (i * 0x4)) + 0x14, 844 + (i * 17)); | 
					
						
							|  |  |  |             L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x84 + (i * 0x4)) + 0x18, 561); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //拍卖行(删除) | 
					
						
							|  |  |  |         L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x84 + (4 * 0x4)) + 0x14, -5000); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //Lv小三角(关闭) | 
					
						
							|  |  |  |         L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x7C8) + 0xC, 256); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //游戏菜单按钮 | 
					
						
							|  |  |  |         local Muen = L_sq_RA(0x01ADE0CC) + 0xc; | 
					
						
							|  |  |  |         Muen = L_sq_RA(Muen) + 0x48; | 
					
						
							|  |  |  |         Muen = L_sq_RA(Muen) + 0x5b4; | 
					
						
							|  |  |  |         Muen = L_sq_RA(Muen) + 0x28; | 
					
						
							|  |  |  |         Muen = L_sq_RA(Muen) + 0x4; | 
					
						
							|  |  |  |         Muen = L_sq_RA(Muen); | 
					
						
							|  |  |  |         L_sq_WA(Muen + 0x14, 818); | 
					
						
							|  |  |  |         L_sq_WA(Muen + 0x18, 561); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //商城按钮 | 
					
						
							|  |  |  |         local Shop = L_sq_RA(0x01ADE0CC) + 0xc; | 
					
						
							|  |  |  |         Shop = L_sq_RA(Shop) + 0x48; | 
					
						
							|  |  |  |         Shop = L_sq_RA(Shop) + 0xBC; | 
					
						
							|  |  |  |         Shop = L_sq_RA(Shop) + 0x4; | 
					
						
							|  |  |  |         Shop = L_sq_RA(Shop) + 0x28; | 
					
						
							|  |  |  |         Shop = L_sq_RA(Shop) + 0x4; | 
					
						
							|  |  |  |         Shop = L_sq_RA(Shop); | 
					
						
							|  |  |  |         L_sq_WA(Shop + 0x14, 755); | 
					
						
							|  |  |  |         L_sq_WA(Shop + 0x18, 561); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //血槽背景 | 
					
						
							|  |  |  |         L_sq_WA(0x00400E01, 133); //血槽背景X | 
					
						
							|  |  |  |         L_sq_WA(5021770, 508); //血槽背景Y | 
					
						
							|  |  |  |         //血球蓝球(删除) | 
					
						
							|  |  |  |         L_sq_WA(4436173, -5000); //血Y | 
					
						
							|  |  |  |         L_sq_WA(4436568, -5000); //蓝Y | 
					
						
							|  |  |  |         L_sq_WA(4436134, -5000); //血球篮球遮盖X | 
					
						
							|  |  |  |         L_sq_WA(4436126, -5000); //血球篮球遮盖X | 
					
						
							|  |  |  |         L_sq_WA(4436529, -5000); //血球篮球遮盖Y | 
					
						
							|  |  |  |         L_sq_WA(4436521, -5000); //血球篮球遮盖Y | 
					
						
							|  |  |  |         L_sq_WA(5006757, -5000); //HP文字标识 Y轴 | 
					
						
							|  |  |  |         L_sq_WA(5006965, -5000); //MP文字标识 Y轴 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //BUFF图标 X在C++Hook中处理 | 
					
						
							| 
									
										
										
										
											2024-09-27 14:04:23 +08:00
										 |  |  |         L_sq_WAB(0x4c8bf5, 542); //Buff图标Y | 
					
						
							|  |  |  |         L_sq_WAB(0x4bf55a, 542); //Buff图标文字标识Y | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //技能变更类型 | 
					
						
							|  |  |  |         local SkillChanageA = L_sq_RA(0x01ADE0CC) + 0x124; | 
					
						
							|  |  |  |         SkillChanageA = L_sq_RA(SkillChanageA); | 
					
						
							|  |  |  |         L_sq_WA(SkillChanageA + 0x14, 416); | 
					
						
							|  |  |  |         L_sq_WA(SkillChanageA + 0x18, 562); | 
					
						
							|  |  |  |         local SkillChanageB = L_sq_RA(0x01ADE0CC) + 0x128; | 
					
						
							|  |  |  |         SkillChanageB = L_sq_RA(SkillChanageB); | 
					
						
							|  |  |  |         L_sq_WA(SkillChanageB + 0x14, 416); | 
					
						
							|  |  |  |         L_sq_WA(SkillChanageB + 0x18, 562); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //拓展技能(被动技能) | 
					
						
							|  |  |  |         local PassSkillSwitch = L_sq_RA(0x01ADE0CC) + 0x128; | 
					
						
							|  |  |  |         PassSkillSwitch = L_sq_RA(PassSkillSwitch) + 0x2cc; | 
					
						
							|  |  |  |         PassSkillSwitch = L_sq_RA(PassSkillSwitch) + 0x0; | 
					
						
							|  |  |  |         PassSkillSwitch = L_sq_RA(PassSkillSwitch) + 0x190; | 
					
						
							|  |  |  |         PassSkillSwitch = L_sq_RA(PassSkillSwitch); | 
					
						
							|  |  |  |         L_sq_WA(PassSkillSwitch + 0x14, 419); | 
					
						
							|  |  |  |         L_sq_WA(PassSkillSwitch + 0x18, 532); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //小地图指南针(删除) | 
					
						
							|  |  |  |         local MiniMapButton = L_sq_RA(0x01ADE0CC) + 0x138; | 
					
						
							|  |  |  |         MiniMapButton = L_sq_RA(MiniMapButton); | 
					
						
							|  |  |  |         L_sq_WA(MiniMapButton + 0xC, 256); | 
					
						
							|  |  |  |         local MiniMapButtonAddress = L_sq_RA(0x01ADE0CC) + 0xC; | 
					
						
							|  |  |  |         MiniMapButtonAddress = L_sq_RA(MiniMapButtonAddress) + 0x48; | 
					
						
							|  |  |  |         MiniMapButtonAddress = L_sq_RA(MiniMapButtonAddress) + 0xBC; | 
					
						
							|  |  |  |         MiniMapButtonAddress = L_sq_RA(MiniMapButtonAddress) + 0x4; | 
					
						
							|  |  |  |         MiniMapButtonAddress = L_sq_RA(MiniMapButtonAddress) + 0x28; | 
					
						
							|  |  |  |         MiniMapButtonAddress = L_sq_RA(MiniMapButtonAddress) + 0x4; | 
					
						
							|  |  |  |         MiniMapButtonAddress = L_sq_RA(MiniMapButtonAddress) + 0x1414; | 
					
						
							|  |  |  |         L_sq_WAB(0x4C6F35, 0xEB); | 
					
						
							|  |  |  |         //右上角指南针X | 
					
						
							|  |  |  |         L_sq_WA(MiniMapButtonAddress, -5000); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //干掉废弃的深渊悬停提示 | 
					
						
							|  |  |  |         MemoryTool.WirteByteArr(0xE6D90C, [0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90]); | 
					
						
							| 
									
										
										
										
											2024-10-01 10:12:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //修复点击邮箱会乱跳鼠标 | 
					
						
							|  |  |  |         L_sq_WAB(0x11BD16E, 0xEB); | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { | 
					
						
							|  |  |  |         Childrens = []; | 
					
						
							|  |  |  |         //注册控件 | 
					
						
							|  |  |  |         RegisterWidget(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); | 
					
						
							|  |  |  |         FixMemory(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         local BallFrameArr = []; | 
					
						
							|  |  |  |         for (local i = 0; i< 120; i++) { | 
					
						
							|  |  |  |             local T = { | 
					
						
							|  |  |  |                 ImgIndex = i, | 
					
						
							|  |  |  |                 Delay = 20, | 
					
						
							|  |  |  |                 Pos = [0, 0] | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             BallFrameArr.append(T); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Hp_BallAni = Lenheart_Ani("", BallFrameArr, [355, 534]); | 
					
						
							|  |  |  |         Hp_BallAni.ImgPath = "interface2/hud/hpmp_vessel.img"; | 
					
						
							|  |  |  |         Mp_BallAni = Lenheart_Ani("", BallFrameArr, [647, 534]); | 
					
						
							|  |  |  |         Mp_BallAni.ImgPath = "interface2/hud/hpmp_vessel.img"; | 
					
						
							|  |  |  |         //预加载 | 
					
						
							|  |  |  |         for (local i = 0; i< 120; i++) { | 
					
						
							|  |  |  |             L_sq_DrawImg("interface2/hud/hpmp_vessel.img", i, -5000, 508); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-11-15 10:32:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function RegisterWidget() { | 
					
						
							|  |  |  |         //铃铛按钮 | 
					
						
							|  |  |  |         local EventButton = LenheartNewUI_BaseButton(728, 561, 27, 27, "interface2/hud/hud.img", 204); | 
					
						
							|  |  |  |         EventButton.OnClick = function() { | 
					
						
							|  |  |  |             local BasePos = getroottable()["LenheartEventOffset"]; | 
					
						
							|  |  |  |             local MyPos = EventList_Obj.Y; | 
					
						
							|  |  |  |             if (EventListShowFlag) { | 
					
						
							|  |  |  |                 getroottable()["LenheartEventOffset"].y = BasePos.y - 5000; | 
					
						
							|  |  |  |                 EventList_Obj.Y = MyPos - 5000; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 getroottable()["LenheartEventOffset"].y = BasePos.y + 5000; | 
					
						
							|  |  |  |                 EventList_Obj.Y = MyPos + 5000; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             //刷新一下活动图标 | 
					
						
							|  |  |  |             L_sq_RefreshEventIcon(); | 
					
						
							|  |  |  |             EventListShowFlag = !EventListShowFlag; | 
					
						
							|  |  |  |             // this.Visible = false; | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         EventButton.TopCallBackFunc = function(obj, button) { | 
					
						
							|  |  |  |             local obj = sq_getMyCharacter(); | 
					
						
							|  |  |  |             local Yoffset = 0; | 
					
						
							|  |  |  |             if (button.isLBDown) Yoffset = 1; | 
					
						
							|  |  |  |             T_DrawDynamicAni(obj, "common/hud/hud_ui/event/event.ani", button.X + 14, button.Y + 6 + Yoffset, "Lenheart_HUD铃铛图像"); | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         Childrens.append(EventButton); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //拍卖行按钮 | 
					
						
							|  |  |  |         local AuctionButton = LenheartNewUI_BaseButton(912, 561, 21, 23, "interface2/hud/hud.img", 17); | 
					
						
							|  |  |  |         AuctionButton.OnClick = function() { | 
					
						
							|  |  |  |             L_sq_Open_ExWindow(0x1ADE090, 13, 0, 1); | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         Childrens.append(AuctionButton); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //冒险团 | 
					
						
							|  |  |  |         local PassPartyButton = LenheartNewUI_BaseButton(708, 558, 21, 23, "interface2/hud/advhud.img", 2); | 
					
						
							|  |  |  |         PassPartyButton.OnClick = function() { | 
					
						
							|  |  |  |             L_NewWindows("Lenheart", 33, 0x65535); | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         PassPartyButton.TopCallBackFunc = function(obj, button) { | 
					
						
							|  |  |  |             local Yoffset = 0; | 
					
						
							|  |  |  |             if (button.isLBDown) Yoffset = 1; | 
					
						
							|  |  |  |             L_sq_DrawCode(L_sq_GetPassLevel().tostring(), 719 - (LenheartTextClass.GetStringLength(L_sq_GetPassLevel().tostring())) / 2, 564 + Yoffset, sq_RGBA(230, 200, 155, 255), 1, 1); | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         Childrens.append(PassPartyButton); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //小地图指南针按钮 | 
					
						
							|  |  |  |         local MiniMapButton = LenheartNewUI_BaseButton(1031, 0, 35, 35, "interface2/hud/hud.img", 77); | 
					
						
							|  |  |  |         MiniMapButton.OnClick = function() { | 
					
						
							|  |  |  |             LenheartNextFrameFuncTab.append(function() { | 
					
						
							|  |  |  |                 L_sq_UseSkill(DIK_N); | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         }.bindenv(this); | 
					
						
							|  |  |  |         Childrens.append(MiniMapButton); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function DrawEventBackground(obj) { | 
					
						
							|  |  |  |         //我的 + 原生 | 
					
						
							|  |  |  |         local EventCounts = EventList_Obj.Events.len() + L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c); | 
					
						
							|  |  |  |         local XCounts = EventCounts > 8 ? 8 : EventCounts; | 
					
						
							|  |  |  |         //如果一个都没有就0 有1个先绘制基本的就要30  后面每一个图标+20  -2是因为够上了就会绘制多一个 | 
					
						
							|  |  |  |         local Width = XCounts == 0 ? 0 : 30 + ((XCounts - 2) * 20); | 
					
						
							|  |  |  |         local YCounts = (EventCounts - 1) / 8; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 10:32:19 +08:00
										 |  |  |         if (getroottable().rawin("LenheartEventOffset")) L_sq_DrawWindow(getroottable()["LenheartEventOffset"].x + 456 - 5, getroottable()["LenheartEventOffset"].y - 5 - (YCounts * 21), Width, YCounts * 20, "interface2/hud/hudbox.img", 0, 22, 20, 7, 21); | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function DrawBall(obj) { | 
					
						
							|  |  |  |         //我的异常 | 
					
						
							|  |  |  |         local HPRGBA = { | 
					
						
							|  |  |  |             R = 255, | 
					
						
							|  |  |  |             G = 0, | 
					
						
							|  |  |  |             B = 0, | 
					
						
							|  |  |  |             A = 250, | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |         local MPRGBA = { | 
					
						
							|  |  |  |             R = 0, | 
					
						
							|  |  |  |             G = 0, | 
					
						
							|  |  |  |             B = 255, | 
					
						
							|  |  |  |             A = 250 | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |         local HPK = 212; | 
					
						
							|  |  |  |         local HPB = 1; | 
					
						
							|  |  |  |         local MPK = 213; | 
					
						
							|  |  |  |         local MPB = 2; | 
					
						
							|  |  |  |         //中毒 | 
					
						
							|  |  |  |         if (sq_IsValidActiveStatus(obj, ACTIVESTATUS_POISON)) { | 
					
						
							|  |  |  |             HPRGBA = { | 
					
						
							|  |  |  |                 R = 128, | 
					
						
							|  |  |  |                 G = 0, | 
					
						
							|  |  |  |                 B = 128, | 
					
						
							|  |  |  |                 A = 250 | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             HPK = 214; | 
					
						
							|  |  |  |             HPB = 20; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         //骑乘要锁定骑乘对象 | 
					
						
							|  |  |  |         if (sq_IsRidingObject(obj)) { | 
					
						
							|  |  |  |             HPRGBA = { | 
					
						
							|  |  |  |                 R = 255, | 
					
						
							|  |  |  |                 G = 128, | 
					
						
							|  |  |  |                 B = 0, | 
					
						
							|  |  |  |                 A = 250 | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             MPRGBA = { | 
					
						
							|  |  |  |                 R = 255, | 
					
						
							|  |  |  |                 G = 128, | 
					
						
							|  |  |  |                 B = 0, | 
					
						
							|  |  |  |                 A = 250 | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             HPK = 215; | 
					
						
							|  |  |  |             HPB = 64; | 
					
						
							|  |  |  |             MPK = 215; | 
					
						
							|  |  |  |             MPB = 64; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             local objectManager = obj.getObjectManager(); | 
					
						
							|  |  |  |             if (objectManager) { | 
					
						
							|  |  |  |                 local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); | 
					
						
							|  |  |  |                 for (local i = 0; i< CollisionObjectNumber; i += 1) { | 
					
						
							|  |  |  |                     local object = objectManager.getCollisionObject(i); | 
					
						
							|  |  |  |                     local Address = L_Sq_GetObjectAddress(object); | 
					
						
							|  |  |  |                     if (Address == L_Sq_GetRidingObjectAddress(obj)) { | 
					
						
							|  |  |  |                         local activeObj = sq_GetCNRDObjectToActiveObject(object); | 
					
						
							|  |  |  |                         MyRidingObject = activeObj; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             MyRidingObject = null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         //获取需要绘制血球蓝球的对象 | 
					
						
							|  |  |  |         local Gobj = obj; | 
					
						
							|  |  |  |         if (sq_IsRidingObject(obj) && MyRidingObject) Gobj = MyRidingObject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //血球 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             //生命值比例 | 
					
						
							|  |  |  |             local HpRate = (Gobj.getHp().tofloat() / Gobj.getHpMax().tofloat()); | 
					
						
							|  |  |  |             //生命值损失数组 | 
					
						
							|  |  |  |             if (!Lenheart_100UI_HpDamageArr) Lenheart_100UI_HpDamageArr = []; | 
					
						
							|  |  |  |             //生命值损失标志 | 
					
						
							|  |  |  |             if (!Lenheart_100UI_HpDamageRateFlag) Lenheart_100UI_HpDamageRateFlag = HpRate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             //push | 
					
						
							|  |  |  |             if (Lenheart_100UI_HpDamageRateFlag != HpRate && (abs((Lenheart_100UI_HpDamageRateFlag * 1000.0 - HpRate * 1000.0)) >= 10)) { | 
					
						
							|  |  |  |                 local MaxHpDamgeArrLen = 100; | 
					
						
							|  |  |  |                 if (Lenheart_100UI_HpDamageArr.len()< MaxHpDamgeArrLen) { | 
					
						
							|  |  |  |                     local T = { | 
					
						
							|  |  |  |                         OldHpRate = Lenheart_100UI_HpDamageRateFlag, | 
					
						
							|  |  |  |                         NowHpRate = HpRate, | 
					
						
							|  |  |  |                         Time = Clock(), | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     Lenheart_100UI_HpDamageArr.append(T); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (!Lenheart_100UI_HpDamageEff) { | 
					
						
							|  |  |  |                         Lenheart_100UI_HpDamageEff = { | 
					
						
							|  |  |  |                             OldHpRate = Lenheart_100UI_HpDamageRateFlag, | 
					
						
							|  |  |  |                             Time = Clock(), | 
					
						
							|  |  |  |                         }; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             Lenheart_100UI_HpDamageRateFlag = HpRate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (Lenheart_100UI_HpDamageEff) { | 
					
						
							|  |  |  |                 local ValueHpBack = Lenheart_100UI_HpDamageEff; | 
					
						
							|  |  |  |                 local DstTime = Clock() - ValueHpBack.Time; | 
					
						
							|  |  |  |                 local HpOffset = 534 + (54 * (1.0 - ValueHpBack.OldHpRate)).tointeger(); | 
					
						
							|  |  |  |                 if (DstTime > 500) { | 
					
						
							|  |  |  |                     HpOffset = sq_GetUniformVelocity(534 + (54 * (1.0 - ValueHpBack.OldHpRate)).tointeger(), 534 + (54 * (1.0 - HpRate)).tointeger(), DstTime - 500, 500); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 setClip(355, HpOffset, 355 + 64, 534 + (54 * (1.0 - HpRate)).tointeger()); //开始裁切 | 
					
						
							|  |  |  |                 L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |                 Hp_BallAni.ShowEx(Duration, sq_RGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A), 1.0, 1.0); | 
					
						
							|  |  |  |                 L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |                 // HpAni.setRGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A); | 
					
						
							|  |  |  |                 releaseClip(); //裁切结束 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if (DstTime > 1000) { | 
					
						
							|  |  |  |                     Lenheart_100UI_HpDamageEff = null; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // 血球缓慢掉血绘制逻辑 | 
					
						
							|  |  |  |             foreach(Pos, Value in Lenheart_100UI_HpDamageArr) { | 
					
						
							|  |  |  |                 local DstTime = Clock() - Value.Time; | 
					
						
							|  |  |  |                 if (DstTime <= 1000) { | 
					
						
							|  |  |  |                     if (DstTime <= 500) { | 
					
						
							|  |  |  |                         local HP_Eff_Alpha = sq_GetUniformVelocity(250, 0, DstTime, 500); | 
					
						
							|  |  |  |                         setClip(355, 534 + (54 * (1.0 - Value.OldHpRate)).tointeger(), 355 + 64, 534 + (54 * (1.0 - Value.NowHpRate)).tointeger()); //开始裁切 | 
					
						
							|  |  |  |                         L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |                         Hp_BallAni.ShowEx(Duration, sq_RGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HP_Eff_Alpha), 1.0, 1.0); | 
					
						
							|  |  |  |                         L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |                         releaseClip(); //裁切结束 | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     Lenheart_100UI_HpDamageArr.remove(Pos); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             //血球绘制逻辑 | 
					
						
							|  |  |  |             setClip(355, 534 + (54 * (1.0 - HpRate)).tointeger(), 355 + 64, 534 + 54); //开始裁切 | 
					
						
							|  |  |  |             L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |             Hp_BallAni.ShowEx(Duration, sq_RGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A), 1.0, 1.0); | 
					
						
							|  |  |  |             Hp_BallAni.ShowEx(Duration, sq_RGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A), 1.0, 1.0); | 
					
						
							|  |  |  |             L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |             releaseClip(); //裁切结束 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             local HpStr = ((Gobj.getHp().tofloat() / Gobj.getHpMax().tofloat()).tofloat() * 100.0) + "%"; | 
					
						
							|  |  |  |             L_sq_DrawCode(HpStr, 391 - LenheartTextClass.GetStringLength(HpStr) / 2, 560, 0xFFFFFFFF, 1, 1); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             //魔法值比例 | 
					
						
							|  |  |  |             local MpRate = (Gobj.getMp().tofloat() / Gobj.getMpMax().tofloat()); | 
					
						
							|  |  |  |             //生命值损失数组 | 
					
						
							|  |  |  |             if (!Lenheart_100UI_MpDamageArr) Lenheart_100UI_MpDamageArr = []; | 
					
						
							|  |  |  |             //生命值损失标志 | 
					
						
							|  |  |  |             if (!Lenheart_100UI_MpDamageRateFlag) Lenheart_100UI_MpDamageRateFlag = MpRate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             //Push | 
					
						
							|  |  |  |             if (Lenheart_100UI_MpDamageRateFlag != MpRate && (abs((Lenheart_100UI_MpDamageRateFlag * 1000.0 - MpRate * 1000.0)) >= 10)) { | 
					
						
							|  |  |  |                 local MaxMpDamgeArrLen = 100; | 
					
						
							|  |  |  |                 if (Lenheart_100UI_MpDamageArr.len()< MaxMpDamgeArrLen) { | 
					
						
							|  |  |  |                     local T = { | 
					
						
							|  |  |  |                         OldMpRate = Lenheart_100UI_MpDamageRateFlag, | 
					
						
							|  |  |  |                         NowMpRate = MpRate, | 
					
						
							|  |  |  |                         Time = Clock(), | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     Lenheart_100UI_MpDamageArr.append(T); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (!Lenheart_100UI_MpDamageEff) { | 
					
						
							|  |  |  |                         Lenheart_100UI_MpDamageEff = { | 
					
						
							|  |  |  |                             OldMpRate = Lenheart_100UI_MpDamageRateFlag, | 
					
						
							|  |  |  |                             Time = Clock(), | 
					
						
							|  |  |  |                         }; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             Lenheart_100UI_MpDamageRateFlag = MpRate; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (Lenheart_100UI_MpDamageEff) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 local ValueMpBack = Lenheart_100UI_MpDamageEff; | 
					
						
							|  |  |  |                 local DstTime = Clock() - ValueMpBack.Time; | 
					
						
							|  |  |  |                 local MpOffset = 534 + (63 * (1.0 - ValueMpBack.OldMpRate)).tointeger(); | 
					
						
							|  |  |  |                 if (DstTime > 500) { | 
					
						
							|  |  |  |                     MpOffset = sq_GetUniformVelocity(534 + (63 * (1.0 - ValueMpBack.OldMpRate)).tointeger(), 534 + (63 * (1.0 - MpRate)).tointeger(), DstTime - 500, 500); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 setClip(647, MpOffset, 647 + 64, 534 + (63 * (1.0 - MpRate)).tointeger()); //开始裁切 | 
					
						
							|  |  |  |                 L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |                 Mp_BallAni.ShowEx(Duration, sq_RGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A), 1.0, 1.0); | 
					
						
							|  |  |  |                 L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |                 releaseClip(); //裁切结束 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if (DstTime > 1000) { | 
					
						
							|  |  |  |                     Lenheart_100UI_MpDamageEff = null; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             foreach(Pos, Value in Lenheart_100UI_MpDamageArr) { | 
					
						
							|  |  |  |                 local DstTime = Clock() - Value.Time; | 
					
						
							|  |  |  |                 if (DstTime <= 1000) { | 
					
						
							|  |  |  |                     if (DstTime <= 500) { | 
					
						
							|  |  |  |                         local Mp_Eff_Alpha = sq_GetUniformVelocity(250, 0, DstTime, 500); | 
					
						
							|  |  |  |                         setClip(647, 534 + (63 * (1.0 - Value.OldMpRate)).tointeger(), 647 + 64, 534 + (63 * (1.0 - Value.NowMpRate)).tointeger()); //开始裁切 | 
					
						
							|  |  |  |                         L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |                         Mp_BallAni.ShowEx(Duration, sq_RGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, Mp_Eff_Alpha), 1.0, 1.0); | 
					
						
							|  |  |  |                         L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |                         releaseClip(); //裁切结束 | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     Lenheart_100UI_MpDamageArr.remove(Pos); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             //蓝球绘制逻辑 | 
					
						
							|  |  |  |             setClip(647, 534 + (63 * (1.0 - MpRate)).tointeger(), 647 + 64, 534 + 63); //开始裁切 | 
					
						
							|  |  |  |             L_sq_SetDrawImgModel(2, 0); | 
					
						
							|  |  |  |             Mp_BallAni.ShowEx(Duration, sq_RGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A), 1.0, 1.0); | 
					
						
							|  |  |  |             Mp_BallAni.ShowEx(Duration, sq_RGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A), 1.0, 1.0); | 
					
						
							|  |  |  |             L_sq_ReleaseDrawImgModel(); | 
					
						
							|  |  |  |             releaseClip(); //裁切结束 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             local MpStr = ((Gobj.getMp().tofloat() / Gobj.getMpMax().tofloat()).tofloat() * 100.0) + "%"; | 
					
						
							|  |  |  |             L_sq_DrawCode(MpStr, 684 - LenheartTextClass.GetStringLength(MpStr) / 2, 560, 0xFFFFFFFF, 1, 1); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         //血盖子 | 
					
						
							|  |  |  |         L_sq_DrawImg("interface2/hud/hud.img", HPK, 355, 534, 1, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); | 
					
						
							|  |  |  |         //蓝盖子 | 
					
						
							|  |  |  |         L_sq_DrawImg("interface2/hud/hud.img", 213, 647, 534, 1, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function BallRectLogic(obj) { | 
					
						
							|  |  |  |         //悬停逻辑 | 
					
						
							|  |  |  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 355, 534, 64, 63)) { | 
					
						
							|  |  |  |             local Gobj = obj; | 
					
						
							|  |  |  |             if (sq_IsRidingObject(obj) && MyRidingObject) Gobj = MyRidingObject; | 
					
						
							|  |  |  |             local Str = "生命值: " + Gobj.getHp() + "/" + Gobj.getHpMax(); | 
					
						
							|  |  |  |             L_sq_DrawWindow(IMouse.GetXPos() - 140 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 36, 0 + LenheartTextClass.GetStringLength(Str), 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | 
					
						
							|  |  |  |             L_sq_DrawCode(Str, IMouse.GetXPos() - 126 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); | 
					
						
							|  |  |  |         } else if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 647, 534, 64, 63)) { | 
					
						
							|  |  |  |             local Gobj = obj; | 
					
						
							|  |  |  |             if (sq_IsRidingObject(obj) && MyRidingObject) Gobj = MyRidingObject; | 
					
						
							|  |  |  |             local Str = "魔法值: " + Gobj.getMp() + "/" + Gobj.getMpMax(); | 
					
						
							|  |  |  |             L_sq_DrawWindow(IMouse.GetXPos() - 140 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 36, 0 + LenheartTextClass.GetStringLength(Str), 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | 
					
						
							|  |  |  |             L_sq_DrawCode(Str, IMouse.GetXPos() - 126 + LenheartTextClass.GetStringLength(Str) / 2, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function DrawExpBar(obj) { | 
					
						
							|  |  |  |         local NowExp = L_sq_GetExp(1); | 
					
						
							|  |  |  |         local MaxExp = L_sq_GetExp(0); | 
					
						
							|  |  |  |         local ExpRate = (NowExp.tofloat() / MaxExp.tofloat()).tofloat(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (L_Sq_GetObjectLevel(obj) == MaxLevel) { | 
					
						
							|  |  |  |             L_sq_DrawImg("interface2/hud/hud.img", 60, 383, 595); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             setClip(383, 595, 248 + (300.0 * ExpRate).tointeger(), 596 + 4); //开始裁切 | 
					
						
							|  |  |  |             L_sq_DrawImg("interface2/hud/hud.img", 4, 383, 595); | 
					
						
							|  |  |  |             releaseClip(); //裁切结束 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function ExpRectLogic(obj) { | 
					
						
							|  |  |  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 383, 595, 300, 4)) { | 
					
						
							|  |  |  |             if (L_Sq_GetObjectLevel(obj) == MaxLevel) { | 
					
						
							|  |  |  |                 L_sq_DrawWindow(IMouse.GetXPos() - 150, IMouse.GetYPos() - 36, 144, 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | 
					
						
							|  |  |  |                 L_sq_DrawCode("已满级!等待服务器下一等级节点!", IMouse.GetXPos() - 142, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 local Str = "当前经验值: " + L_sq_GetExp(1) + "  总经验值: " + L_sq_GetExp(0); | 
					
						
							|  |  |  |                 L_sq_DrawWindow(IMouse.GetXPos() - 150, IMouse.GetYPos() - 36, 144 + LenheartTextClass.GetStringLength(L_sq_GetExp(1).tostring() + L_sq_GetExp(0).tostring()), 12, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | 
					
						
							|  |  |  |                 L_sq_DrawCode(Str, IMouse.GetXPos() - 140, IMouse.GetYPos() - 24, 0xFFFFFFFF, 1, 1); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function DrawLevelAndSp(obj) { | 
					
						
							|  |  |  |         local ChrLevel = L_Sq_GetObjectLevel(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         local ChrSp = L_sq_GetSp(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         L_sq_DrawCode("Lv." + ChrLevel.tostring(), 356 - (LenheartTextClass.GetStringLength("Lv." + ChrLevel.tostring()) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); | 
					
						
							|  |  |  |         L_sq_DrawCode(ChrSp.tostring(), 713 - (LenheartTextClass.GetStringLength(ChrSp.tostring()) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function DrawFatigue(obj) { | 
					
						
							|  |  |  |         local MaxFatigue = L_sq_GetFatigue(0); | 
					
						
							|  |  |  |         local NowFatigue = MaxFatigue - L_sq_GetFatigue(1); | 
					
						
							|  |  |  |         local FatigueRate = ((NowFatigue * 100) / MaxFatigue).tofloat(); //计算比率 | 
					
						
							|  |  |  |         setClip(773, 591, 773 + (141 * (FatigueRate / 100).tofloat()).tointeger(), 591 + 8); //开始裁切 | 
					
						
							|  |  |  |         L_sq_DrawImg("interface2/hud/hud.img", 3, 773, 591); | 
					
						
							|  |  |  |         releaseClip(); //裁切结束 | 
					
						
							|  |  |  |         local FatigueStr = NowFatigue + "/" + MaxFatigue; | 
					
						
							|  |  |  |         L_sq_DrawCode(FatigueStr, 940 - (LenheartTextClass.GetStringLength(FatigueStr) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //绘制主界面 | 
					
						
							|  |  |  |     function DrawMain(obj) { | 
					
						
							| 
									
										
										
										
											2025-05-27 21:24:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  |         //绘制背景 | 
					
						
							| 
									
										
										
										
											2024-09-27 14:04:23 +08:00
										 |  |  |         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); | 
					
						
							| 
									
										
										
										
											2024-09-29 16:52:10 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for (local i = 0; i< 7; i++) { | 
					
						
							| 
									
										
										
										
											2024-09-27 14:04:23 +08:00
										 |  |  |             //上排技能 | 
					
						
							|  |  |  |             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); | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //绘制血球蓝球 | 
					
						
							|  |  |  |         DrawBall(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //绘制经验盖槽 | 
					
						
							|  |  |  |         L_sq_DrawImg("interface2/hud/hud.img", 202, 313, 582); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-29 16:52:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  |         //绘制经验条 | 
					
						
							|  |  |  |         DrawExpBar(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //绘制等级和Sp点 | 
					
						
							|  |  |  |         DrawLevelAndSp(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //绘制疲劳值 | 
					
						
							|  |  |  |         DrawFatigue(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //绘制活动图标背景槽 | 
					
						
							|  |  |  |         DrawEventBackground(obj); | 
					
						
							| 
									
										
										
										
											2024-09-27 14:04:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 10:32:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-16 17:09:36 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function Show(obj) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function TopShow(obj) { | 
					
						
							|  |  |  |         //血蓝球悬停逻辑 | 
					
						
							|  |  |  |         BallRectLogic(obj); | 
					
						
							|  |  |  |         //经验条悬停逻辑 | 
					
						
							|  |  |  |         ExpRectLogic(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function BottomShow(obj) { | 
					
						
							|  |  |  |         DrawMain(obj); | 
					
						
							|  |  |  |         LenheartNewUI_Windows.Show(obj); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //动态窗口设置逻辑 | 
					
						
							|  |  |  |     function Active_Windows_SyncPos() { | 
					
						
							|  |  |  |         //任务快捷导航窗口 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             local WindowAddress = L_sq_GetWindowById(1); | 
					
						
							|  |  |  |             if (WindowAddress) L_sq_WA(WindowAddress + 0x14, 907); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //逻辑入口 | 
					
						
							|  |  |  |     function Proc(obj) { | 
					
						
							|  |  |  |         LenheartNewUI_Windows.SyncPos(X, Y); | 
					
						
							|  |  |  |         Active_Windows_SyncPos(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function Lenheart_HudUi_Fun(obj) { | 
					
						
							|  |  |  |     local RootTab = getroottable(); | 
					
						
							|  |  |  |     if (!RootTab.rawin("HudUi_Obj")) { | 
					
						
							|  |  |  |         RootTab.rawset("HudUi_Obj", LenheartNewUI_CreateWindow(HudUiC, "HUD血槽界面窗口", 0, 0, 0, 0, 0)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | getroottable()["LenheartFuncTab"].rawset("HudUiFuncN", Lenheart_HudUi_Fun); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // L_sq_Test(L_sq_RA(0x01AB7CDC), 0x3DB61400); | 
					
						
							|  |  |  | // local Ret = L_sq_Test(L_sq_RA(0x01AB7CDC), 10); | 
					
						
							|  |  |  | // local Ret = L_sq_Test(L_sq_RA(0x01A5FA88), 101020037); | 
					
						
							| 
									
										
										
										
											2025-05-27 21:24:22 +08:00
										 |  |  | // print(format("%02x", Ret)); | 
					
						
							|  |  |  | 
 |