1108 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1108 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:100UI.nut | ||
|  | 路径:Plugins/100UI/100UI.nut | ||
|  | 创建日期:2023-11-01	20:56 | ||
|  | 文件用途: | ||
|  | */ | ||
|  | 
 | ||
|  | function Lenheart_100UI_DrawHPMP(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); | ||
|  |                     getroottable()["Lenheart100UIMyRidingObject"] <- activeObj; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } else { | ||
|  |         getroottable().rawdelete("Lenheart100UIMyRidingObject"); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     local Gobj = obj; | ||
|  |     if (sq_IsRidingObject(obj) && getroottable().rawin("Lenheart100UIMyRidingObject")) Gobj = getroottable().Lenheart100UIMyRidingObject; | ||
|  |     // local Str = "生命值: " + Gobj.getHp() + "/" + Gobj.getHpMax(); | ||
|  | 
 | ||
|  | 
 | ||
|  |     //生命值比例 | ||
|  |     local HpRate = (Gobj.getHp().tofloat() / Gobj.getHpMax().tofloat()); | ||
|  |     //生命值损失数组 | ||
|  |     if (!("Lenheart_100UI_HpDamageArr" in getroottable())) { | ||
|  |         getroottable().Lenheart_100UI_HpDamageArr <- []; | ||
|  |     } | ||
|  |     //生命值损失标志 | ||
|  |     if (!("Lenheart_100UI_HpDamageRateFlag" in getroottable())) { | ||
|  |         getroottable().Lenheart_100UI_HpDamageRateFlag <- HpRate; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //Push | ||
|  |     if (getroottable().Lenheart_100UI_HpDamageRateFlag != HpRate && (abs((getroottable().Lenheart_100UI_HpDamageRateFlag * 1000.0 - HpRate * 1000.0)) >= 10)) { | ||
|  |         local MaxHpDamgeArrLen = 100; | ||
|  |         if (getroottable().Lenheart_100UI_HpDamageArr.len()< MaxHpDamgeArrLen) { | ||
|  |             local T = { | ||
|  |                 OldHpRate = getroottable().Lenheart_100UI_HpDamageRateFlag, | ||
|  |                 NowHpRate = HpRate, | ||
|  |                 Time = Clock(), | ||
|  |             } | ||
|  |             getroottable().Lenheart_100UI_HpDamageArr.append(T); | ||
|  | 
 | ||
|  |             if (!("Lenheart_100UI_HpDamageEff" in getroottable())) { | ||
|  |                 getroottable().Lenheart_100UI_HpDamageEff <- { | ||
|  |                     OldHpRate = getroottable().Lenheart_100UI_HpDamageRateFlag, | ||
|  |                     Time = Clock(), | ||
|  |                 }; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     getroottable().Lenheart_100UI_HpDamageRateFlag <- HpRate; | ||
|  | 
 | ||
|  |     if ("Lenheart_100UI_HpDamageEff" in getroottable()) { | ||
|  |         local ValueHpBack = getroottable().Lenheart_100UI_HpDamageEff; | ||
|  |         local DstTime = Clock() - ValueHpBack.Time; | ||
|  |         local HpOffset = 534 + (63 * (1.0 - ValueHpBack.OldHpRate)).tointeger(); | ||
|  |         if (DstTime > 500) { | ||
|  |             HpOffset = sq_GetUniformVelocity(534 + (63 * (1.0 - ValueHpBack.OldHpRate)).tointeger(), 534 + (63 * (1.0 - HpRate)).tointeger(), DstTime - 500, 500); | ||
|  |         } | ||
|  |         setClip(222, HpOffset, 222 + 64, 534 + (63 * (1.0 - HpRate)).tointeger()); //开始裁切 | ||
|  |         local HpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 222 - 45, 534 + 31, "ui/hud/lenheartnew/hpmp_vesselHp"); | ||
|  |         HpAni.setRGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A); | ||
|  |         releaseClip(); //裁切结束 | ||
|  | 
 | ||
|  |         if (DstTime > 1000) { | ||
|  |             getroottable().rawdelete("Lenheart_100UI_HpDamageEff"); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     foreach(Pos, Value in getroottable().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(222, 534 + (63 * (1.0 - Value.OldHpRate)).tointeger(), 222 + 64, 534 + (63 * (1.0 - Value.NowHpRate)).tointeger()); //开始裁切 | ||
|  |                 L_sq_DrawImg("interface2/hud/hud.img", 36, 226, 536, 0, sq_RGBA(255, 255, 255, HP_Eff_Alpha), 1.0, 1.0); | ||
|  |                 releaseClip(); //裁切结束 | ||
|  |             } | ||
|  |         } else { | ||
|  |             getroottable().Lenheart_100UI_HpDamageArr.remove(Pos); | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //血球绘制逻辑 | ||
|  |     setClip(222, 534 + (63 * (1.0 - HpRate)).tointeger(), 222 + 64, 534 + 63); //开始裁切 | ||
|  |     L_sq_DrawImg("interface2/hud/hud.img", HPB, 226, 536); | ||
|  |     local HpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 222 - 45, 534 + 31, "ui/hud/lenheartnew/hpmp_vesselHp"); | ||
|  |     HpAni.setRGBA(HPRGBA.R, HPRGBA.G, HPRGBA.B, HPRGBA.A); | ||
|  |     releaseClip(); //裁切结束 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //悬停逻辑 | ||
|  |     if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 222, 534, 64, 63)) { | ||
|  |         local T = { | ||
|  |             X = IMouse.GetXPos(), | ||
|  |             Y = IMouse.GetYPos(), | ||
|  |         } | ||
|  |         getroottable().rawset("Lenheart100UIHPSTR", T); | ||
|  |     } else { | ||
|  |         getroottable().rawdelete("Lenheart100UIHPSTR"); | ||
|  |     } | ||
|  |     //血槽外框逻辑 | ||
|  |     L_sq_DrawImg("interface2/hud/hud.img", HPK, 222, 534); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //魔法值比例 | ||
|  |     local MpRate = (Gobj.getMp().tofloat() / Gobj.getMpMax().tofloat()); | ||
|  |     //生命值损失数组 | ||
|  |     if (!("Lenheart_100UI_MpDamageArr" in getroottable())) { | ||
|  |         getroottable().Lenheart_100UI_MpDamageArr <- []; | ||
|  |     } | ||
|  |     //生命值损失标志 | ||
|  |     if (!("Lenheart_100UI_MpDamageRateFlag" in getroottable())) { | ||
|  |         getroottable().Lenheart_100UI_MpDamageRateFlag <- MpRate; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //Push | ||
|  |     if (getroottable().Lenheart_100UI_MpDamageRateFlag != MpRate && (abs((getroottable().Lenheart_100UI_MpDamageRateFlag * 1000.0 - MpRate * 1000.0)) >= 10)) { | ||
|  |         local MaxMpDamgeArrLen = 100; | ||
|  |         if (getroottable().Lenheart_100UI_MpDamageArr.len()< MaxMpDamgeArrLen) { | ||
|  |             local T = { | ||
|  |                 OldMpRate = getroottable().Lenheart_100UI_MpDamageRateFlag, | ||
|  |                 NowMpRate = MpRate, | ||
|  |                 Time = Clock(), | ||
|  |             } | ||
|  |             getroottable().Lenheart_100UI_MpDamageArr.append(T); | ||
|  | 
 | ||
|  |             if (!("Lenheart_100UI_MpDamageEff" in getroottable())) { | ||
|  |                 getroottable().Lenheart_100UI_MpDamageEff <- { | ||
|  |                     OldMpRate = getroottable().Lenheart_100UI_MpDamageRateFlag, | ||
|  |                     Time = Clock(), | ||
|  |                 }; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     getroottable().Lenheart_100UI_MpDamageRateFlag <- MpRate; | ||
|  | 
 | ||
|  |     if ("Lenheart_100UI_MpDamageEff" in getroottable()) { | ||
|  | 
 | ||
|  |         local ValueMpBack = getroottable().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(514, MpOffset, 514 + 64, 534 + (63 * (1.0 - MpRate)).tointeger()); //开始裁切 | ||
|  |         local MpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 514 - 45, 534 + 31, "ui/hud/lenheartnew/Mpmp_vesselMp"); | ||
|  |         MpAni.setRGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A); | ||
|  |         releaseClip(); //裁切结束 | ||
|  | 
 | ||
|  |         if (DstTime > 1000) { | ||
|  |             getroottable().rawdelete("Lenheart_100UI_MpDamageEff"); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     foreach(Pos, Value in getroottable().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(514, 534 + (63 * (1.0 - Value.OldMpRate)).tointeger(), 514 + 64, 534 + (63 * (1.0 - Value.NowMpRate)).tointeger()); //开始裁切 | ||
|  |                 L_sq_DrawImg("interface2/hud/hud.img", 36, 518, 536, 0, sq_RGBA(255, 255, 255, Mp_Eff_Alpha), 1.0, 1.0); | ||
|  |                 releaseClip(); //裁切结束 | ||
|  |             } | ||
|  |         } else { | ||
|  |             getroottable().Lenheart_100UI_MpDamageArr.remove(Pos); | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //蓝球绘制逻辑 | ||
|  |     setClip(518, 534 + (63 * (1.0 - MpRate)).tointeger(), 518 + 64, 534 + 63); //开始裁切 | ||
|  |     L_sq_DrawImg("interface2/hud/hud.img", MPB, 518, 536); | ||
|  |     local MpAni = BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/lenheartnew/hpmp_vessel.ani", 514 - 45, 534 + 31, "ui/hud/lenheartnew/hpmp_vesselMp"); | ||
|  |     MpAni.setRGBA(MPRGBA.R, MPRGBA.G, MPRGBA.B, MPRGBA.A); | ||
|  |     releaseClip(); //裁切结束 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //悬停逻辑 | ||
|  |     if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 514, 534, 64, 63)) { | ||
|  |         local T = { | ||
|  |             X = IMouse.GetXPos(), | ||
|  |             Y = IMouse.GetYPos(), | ||
|  |         } | ||
|  |         getroottable().rawset("Lenheart100UIMPSTR", T); | ||
|  |     } else { | ||
|  |         getroottable().rawdelete("Lenheart100UIMPSTR"); | ||
|  |     } | ||
|  |     //血槽外框逻辑 | ||
|  |     L_sq_DrawImg("interface2/hud/hud.img", MPK, 514, 534); | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function Lenheart_100UI_Event_BackGround() { | ||
|  |     if (getroottable().rawin("LenheartEventOffset") && getroottable()["LenheartEventOffset"] == 519) { | ||
|  |         local Yl = 0; | ||
|  |         if (getroottable().rawin("YosinEventSystem")) { | ||
|  |             local Count = (getroottable().YosinEventSystem.len() + (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c))); | ||
|  |             if (Count > 8) Count = 8; | ||
|  |             Yl = Count * 20; | ||
|  |         } else { | ||
|  |             local Count = (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c)); | ||
|  |             if (Count > 8) Count = 8; | ||
|  |             Yl = Count * 20; | ||
|  |         } | ||
|  |         local YAd = 0; | ||
|  |         if (getroottable().rawin("YosinEventSystem")) { | ||
|  |             local Count = (getroottable().YosinEventSystem.len() + (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c))) / 9; | ||
|  |             YAd = Count * 20; | ||
|  |         } else { | ||
|  |             local Count = (L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c)) / 9; | ||
|  |             YAd = Count * 20; | ||
|  |         } | ||
|  |         L_sq_DrawWindow(595, 514 - YAd, Yl - 1, YAd, "interface2/hud/hudbox.img", 0, 22, 20, 7, 21); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | function Lenheart_100UI(obj) { | ||
|  | 
 | ||
|  |     //血球篮球 | ||
|  |     Lenheart_100UI_DrawHPMP(obj); | ||
|  | 
 | ||
|  | 
 | ||
|  |     L_sq_DrawImg("interface2/hud/hud.img", 202, 176, 582); | ||
|  | 
 | ||
|  | 
 | ||
|  |     //传送 | ||
|  |     TownMove(obj); | ||
|  | 
 | ||
|  |     //等级和sp点 | ||
|  |     { | ||
|  |         local ChrLevel = L_Sq_GetObjectLevel(obj); | ||
|  |         local ChrSp = L_sq_GetSp(); | ||
|  | 
 | ||
|  |         L_sq_DrawCode("Lv." + ChrLevel.tostring(), 222 - (LenheartTextClass.GetStringLength("Lv." + ChrLevel.tostring()) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); | ||
|  |         L_sq_DrawCode(ChrSp.tostring(), 574 - (LenheartTextClass.GetStringLength(ChrSp.tostring()) / 2), 587, sq_RGBA(230, 200, 155, 255), 1, 1); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //经验条 | ||
|  |     { | ||
|  |         local NowExp = L_sq_GetExp(1); | ||
|  |         local MaxExp = L_sq_GetExp(0); | ||
|  |         local ExpRate = (NowExp.tofloat() / MaxExp.tofloat()).tofloat(); | ||
|  | 
 | ||
|  |         if (L_Sq_GetObjectLevel(obj) == 100) { | ||
|  |             L_sq_DrawImg("interface2/hud/hud.img", 60, 250, 595); | ||
|  |         } else { | ||
|  |             setClip(250, 595, 248 + (300.0 * ExpRate).tointeger(), 596 + 4); //开始裁切 | ||
|  |             L_sq_DrawImg("interface2/hud/hud.img", 4, 250, 595); | ||
|  |             releaseClip(); //裁切结束 | ||
|  |         } | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 250, 595, 300, 4)) { | ||
|  |             local T = { | ||
|  |                 X = IMouse.GetXPos(), | ||
|  |                 Y = IMouse.GetYPos(), | ||
|  |             } | ||
|  |             getroottable().rawset("Lenheart100UIEXPSTR", T); | ||
|  |         } else { | ||
|  |             getroottable().rawdelete("Lenheart100UIEXPSTR"); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //铃铛按钮 | ||
|  |     local RefreshButton = LenheartTabbars(596, 554, 27, 27); | ||
|  |     RefreshButton.SetFrame("interface2/HUD/HUD.img", 204); | ||
|  |     RefreshButton.Show(); | ||
|  |     if (RefreshButton.isLBActive()) { | ||
|  |         if (getroottable().rawin("MouseObject")) { | ||
|  |             if (!getroottable().rawin("LenheartEventOffset") || getroottable()["LenheartEventOffset"] == 900) { | ||
|  |                 getroottable()["LenheartEventOffset"] <- 519 | ||
|  |                 getroottable()["YosinEventIconInfoYpos"] <- 519 | ||
|  |             } else { | ||
|  |                 getroottable()["LenheartEventOffset"] <- 900 | ||
|  |                 getroottable()["YosinEventIconInfoYpos"] <- 900 | ||
|  |             } | ||
|  |             L_sq_RefreshEventIcon(); | ||
|  |         } | ||
|  |     } | ||
|  |     BasicsDrawTool.T_DrawDynamicAni(obj, "ui/hud/animation2/informationnoti_alarm00.ani", 601, 558 + (RefreshButton.isLBDown() ? 1 : 0), "铃铛晃动动画"); | ||
|  |     L_sq_DrawImg("interface2/hud/hulun.img", 5, 611, 552 + (RefreshButton.isLBDown() ? 1 : 0)); | ||
|  | 
 | ||
|  | 
 | ||
|  |     // print(L_sq_GetPassLevel()); | ||
|  |     //冒险团 | ||
|  |     local PassPartyButton = LenheartTabbars(577, 555, 21, 23); | ||
|  |     PassPartyButton.SetFrame("interface2/hud/advhud.img", 2); | ||
|  |     PassPartyButton.Show(); | ||
|  |     L_sq_DrawCode(L_sq_GetPassLevel().tostring(), 588 - (LenheartTextClass.GetStringLength(L_sq_GetPassLevel().tostring())) / 2, 561 + (PassPartyButton.isLBDown() ? 1 : 0), 0xFFFFFFFF, 1, 1); | ||
|  |     if (PassPartyButton.isLBActive()) { | ||
|  |         L_NewWindows("Lenheart", 33, 0x65535); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //拍卖行 | ||
|  |     local AuctionButton = LenheartTabbars(780, 553, 21, 23); | ||
|  |     AuctionButton.SetFrame("interface2/hud/hud.img", 17); | ||
|  |     AuctionButton.Show(); | ||
|  |     if (AuctionButton.isLBActive()) { | ||
|  |         getroottable().IsLenheart_100UI_AuctionState <- true; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     if ("IsLenheart_100UI_AuctionState" in getroottable()) { | ||
|  |         L_sq_DrawWindow(684, 490, 96, 40, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | ||
|  |         local AButton = LenheartTabbars(690, 495, 108, 21); | ||
|  |         AButton.SetFrame("interface2/global_navigation/extrafeature/extrafeature_cn.img", 0); | ||
|  |         AButton.Show(); | ||
|  |         if (AButton.isLBActive()) { | ||
|  |             L_sq_Open_ExWindow(0x1ADE090, 13, 0, 1); | ||
|  |         } | ||
|  | 
 | ||
|  |         local BButton = LenheartTabbars(690, 495 + 26, 108, 21); | ||
|  |         BButton.SetFrame("interface2/global_navigation/extrafeature/extrafeature_cn.img", 4); | ||
|  |         BButton.Show(); | ||
|  |         if (BButton.isLBActive()) { | ||
|  |             L_sq_Open_ExWindow(0x1ADE090, 14, 0, 1); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (getroottable().rawin("MouseObject")) { | ||
|  |             local Mobj = getroottable()["MouseObject"]; | ||
|  |             if (Mobj.LbEvent && !AuctionButton.isInRect()) { | ||
|  |                 getroottable().rawdelete("IsLenheart_100UI_AuctionState"); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | function Lenheart_100UITop(obj) { | ||
|  | 
 | ||
|  |     // Lenheart_100UI_DrawSkillAddSystem(obj); | ||
|  | 
 | ||
|  |     //悬停层绘制 | ||
|  |     { | ||
|  |         if (getroottable().rawin("Lenheart100UIEXPSTR")) { | ||
|  | 
 | ||
|  |             if (L_Sq_GetObjectLevel(obj) == 100) { | ||
|  |                 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); | ||
|  |             } | ||
|  |         } | ||
|  |         if (getroottable().rawin("Lenheart100UIHPSTR")) { | ||
|  |             local Gobj = obj; | ||
|  |             if (sq_IsRidingObject(obj) && getroottable().rawin("Lenheart100UIMyRidingObject")) Gobj = getroottable().Lenheart100UIMyRidingObject; | ||
|  |             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); | ||
|  | 
 | ||
|  |         } | ||
|  |         if (getroottable().rawin("Lenheart100UIMPSTR")) { | ||
|  |             local Gobj = obj; | ||
|  |             if (sq_IsRidingObject(obj) && getroottable().rawin("Lenheart100UIMyRidingObject")) Gobj = getroottable().Lenheart100UIMyRidingObject; | ||
|  | 
 | ||
|  |             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 Sq_Get_Event_Pos(a) { | ||
|  |     if (getroottable().rawin("LenheartEventOffset")) | ||
|  |         return getroottable()["LenheartEventOffset"]; | ||
|  |     else { | ||
|  |         getroottable()["LenheartEventOffset"] <- 519 | ||
|  |         getroottable()["YosinEventIconInfoYpos"] <- 519 | ||
|  |         return getroottable()["LenheartEventOffset"]; | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | if (getroottable().rawin("LenheartBaseFuncTab")) { | ||
|  |     getroottable()["LenheartBaseFuncTab"].rawset("100UI_LenheartFunc", Lenheart_100UITop); | ||
|  | } else { | ||
|  |     local T = {}; | ||
|  |     T.rawset("100UI_LenheartFunc", Lenheart_100UITop); | ||
|  |     getroottable().rawset("LenheartBaseFuncTab", T); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | function Lenheart_UI_MiniMap_CallBack(Chunk) { | ||
|  |     // print(Chunk); | ||
|  |     local Jso = Json.Decode(Chunk); | ||
|  |     getroottable().Lenheart_UI_MiniMap_Info <- Jso; | ||
|  | } | ||
|  | Pack_Control.rawset(30008008, Lenheart_UI_MiniMap_CallBack); | ||
|  | 
 | ||
|  | 
 | ||
|  | function Sq_DrawMiniMapUI(obj) { | ||
|  |     local obj = sq_GetMyMasterCharacter(); | ||
|  |     if (!obj) return; | ||
|  | 
 | ||
|  |     //没拿过信息拿一次 | ||
|  |     if (!("Lenheart_UI_MiniMap_OpenPack" in getroottable())) { | ||
|  |         local T = { | ||
|  |             op = 20231010, | ||
|  |             realop = 30008008, | ||
|  |             Type = 3, | ||
|  |         } | ||
|  |         BasicsDrawTool.SendPack(T); | ||
|  |         getroottable().Lenheart_UI_MiniMap_OpenPack <- true; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     L_sq_DrawImg("interface/minimap_minimap_town.img", 8, 131, 7); | ||
|  |     if ("Lenheart_UI_MiniMap_Info" in getroottable()) { | ||
|  |         local Id = 0; | ||
|  |         if ("Lenheart_UI_MiniMap_Info_NowId" in getroottable()) Id = getroottable().Lenheart_UI_MiniMap_Info_NowId; | ||
|  |         L_sq_DrawCode(getroottable().Lenheart_UI_MiniMap_Info.regionInfo[Id].Name, 135, 10, 0xFFFFFFFF, 1, 1); | ||
|  |     } | ||
|  | 
 | ||
|  |     //遮挡原生按钮 | ||
|  |     if ((getroottable().rawin("Lenheart_MiniMapWindow"))) { | ||
|  |         getroottable().Lenheart_MiniMapWindow.Show(obj); | ||
|  |     } else { | ||
|  |         getroottable().Lenheart_MiniMapWindow <- LenheartWindow(230, 0, 30, 30, 0); //坐标 大小 标题栏高度 | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制自己三角 | ||
|  |     local AButton = LenheartTabbars(237, 8, 108, 21); | ||
|  |     AButton.SetFrame("interface/windowcommon.img", 59); | ||
|  |     AButton.Show(); | ||
|  |     if (AButton.isLBActive()) { | ||
|  |         getroottable().Lenheart_UI_MiniMap_Open <- true; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!("Lenheart_UI_MiniMap_Open" in getroottable())) { | ||
|  |         //关闭遮挡 | ||
|  |         if ((getroottable().rawin("Lenheart_MiniMapSelectWindow"))) { | ||
|  |             if (getroottable().Lenheart_MiniMapSelectWindow.YMouseSw == false) { | ||
|  |                 IMouse.ReleaseMouseClick(); | ||
|  |                 getroottable().Lenheart_MiniMapSelectWindow.YMouseSw = true; | ||
|  |                 L_sq_WA(0x1b46898, 0); | ||
|  |                 getroottable().rawdelete("Lenheart_MiniMapSelectWindow"); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     //判断三角打开 | ||
|  |     else { | ||
|  |         if ("Lenheart_UI_MiniMap_Info" in getroottable()) { | ||
|  |             //遮挡下面地图不让点 | ||
|  |             if ((getroottable().rawin("Lenheart_MiniMapSelectWindow"))) { | ||
|  |                 getroottable().Lenheart_MiniMapSelectWindow.Show(obj); | ||
|  |             } else { | ||
|  |                 getroottable().Lenheart_MiniMapSelectWindow <- LenheartWindow(0, 30, 800, 600, 0); //坐标 大小 标题栏高度 | ||
|  |             } | ||
|  | 
 | ||
|  |             local Info = getroottable().Lenheart_UI_MiniMap_Info; | ||
|  |             local SFxuanting = false; | ||
|  |             foreach(Pos, Value in Info.regionInfo) { | ||
|  |                 L_sq_DrawImg("interface/minimap_minimap_town.img", 9, 131, 25 + (Pos * 18)); | ||
|  |                 // L_sq_DrawWindow(128, 24 + (Pos * 18), 108, 10, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | ||
|  |                 L_sq_DrawCode(Value.Name, 135, 28 + (Pos * 18), 0xFFFFFFFF, 1, 1); | ||
|  |                 if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 131, 25 + (Pos * 18), 108, 10)) { | ||
|  |                     SFxuanting = true; | ||
|  |                     L_sq_SetDrawImgModel(2, 0); | ||
|  |                     L_sq_DrawImg("interface/minimap_minimap_town.img", 16, 131, 25 + (Pos * 18)); | ||
|  |                     L_sq_ReleaseDrawImgModel(); | ||
|  |                     if (getroottable().rawin("MouseObject")) { | ||
|  |                         if (getroottable()["MouseObject"].LbEvent) { | ||
|  |                             getroottable().rawdelete("Lenheart_UI_MiniMap_Open"); | ||
|  |                             L_sq_Select_MiniMap_Index(Value.Id); | ||
|  |                             getroottable().Lenheart_UI_MiniMap_Info_NowId <- Pos; | ||
|  |                             break; | ||
|  |                             // getroottable().Lenheart_UI_MiniMap_Open <- false; | ||
|  |                         } | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class Lenheart_100UI_DrawSkillAddClassC extends BasicsDrawTool { | ||
|  | 
 | ||
|  | 
 | ||
|  |     Mobj = null; | ||
|  | 
 | ||
|  |     //技能信息 | ||
|  |     MySkillInfoTable = null; | ||
|  |     //技能按键数组 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //拓展技能格子 | ||
|  |     Add_Ex_Slot1 = null; | ||
|  |     Add_Ex_Slot1_Key = null; | ||
|  |     Add_Ex_Slot2 = null; | ||
|  |     Add_Ex_Slot2_Key = null; | ||
|  | 
 | ||
|  |     //格子大小 | ||
|  |     Rate = 0.75; | ||
|  |     //悬停特效 | ||
|  |     TopEffectobj = null; | ||
|  |     ExTopEffectobj = null; | ||
|  |     //点击信息 | ||
|  |     ClickInfoobj = null; | ||
|  | 
 | ||
|  | 
 | ||
|  |     //我的原生快捷栏技能Map | ||
|  |     QuickSkillList = null; | ||
|  |     //我的可设置快捷技能键技能Map | ||
|  |     SettingSkillList = null; | ||
|  |     //设置技能键位Buffer | ||
|  |     SettingKeyCodeBuffer = null; | ||
|  | 
 | ||
|  |     function GetSkillInfoCallBack(Chunk) { | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         // Sout("收到包内容: %L", Chunk); | ||
|  |         local Index = 0; | ||
|  |         foreach(Pos, Value in Jso.regionInfo) { | ||
|  |             //Vlaue是每一个技能的对象 | ||
|  |             if (Value.type == "[active]\r") { | ||
|  |                 MySkillInfoTable[Value.Id] <- Jso.regionInfo[Index]; | ||
|  |             } | ||
|  |             Index++; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function GetSkillInfo() { | ||
|  |         local obj = sq_GetMyMasterCharacter(); | ||
|  | 
 | ||
|  |         for (local z = 0; z< 26; z++) { | ||
|  |             local SkillIdList = []; | ||
|  |             for (local i = 0; i< 10; i++) { | ||
|  |                 SkillIdList.append(i + (z * 10)); | ||
|  |             } | ||
|  |             local T = { | ||
|  |                 op = 20231010, | ||
|  |                 realop = 80000002, | ||
|  |                 Type = 4, | ||
|  |                 SkillId = SkillIdList, | ||
|  |                 Job = sq_getJob(obj), | ||
|  |                 NeedLable = ["type", "Icon", "command", "name", "Id"], | ||
|  |             } | ||
|  |             // local pack = L_sq_EncondeJson(T); | ||
|  |             // L_sq_SendPackType(130); | ||
|  |             // L_sq_SendPackWChar(pack); | ||
|  |             // L_sq_SendPack(); | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     function HookInput(Code) { | ||
|  |         if (ExTopEffectobj) { | ||
|  |             if ("ClickFlag" in ExTopEffectobj) { | ||
|  |                 SettingKeyCodeBuffer = Code; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor() { | ||
|  |         MySkillInfoTable = {}; | ||
|  | 
 | ||
|  |         if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; | ||
|  | 
 | ||
|  |         RegisterInputHook("Lenheart_100_UI_Key_Register", HookInput.bindenv(this)); | ||
|  | 
 | ||
|  | 
 | ||
|  |         Pack_Control.rawset(80000002, GetSkillInfoCallBack.bindenv(this)); | ||
|  | 
 | ||
|  |         GetSkillInfo(); | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawOneSlot(x, y) { | ||
|  |         L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, x, y, 0, sq_RGBA(255, 255, 255, 250), Rate, Rate); | ||
|  | 
 | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawOneSkill(obj, Idx, x, y) { | ||
|  |         local ImgArr = split(MySkillInfoTable[Idx].Icon[0], "\r"); | ||
|  |         L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), x, y, 0, sq_RGBA(255, 255, 255, 250), Rate, Rate); | ||
|  | 
 | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, x, y, (28 * Rate).tointeger(), (28 * Rate).tointeger())) { | ||
|  |             local T = { | ||
|  |                 X = x, | ||
|  |                 Y = y | ||
|  |             } | ||
|  |             TopEffectobj = T; | ||
|  |             if (Mobj.Lb == 1) { | ||
|  |                 TopEffectobj = null; | ||
|  |                 if (!ClickInfoobj) ClickInfoobj = Idx; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     function DrawTopEffect(obj) { | ||
|  |         if (TopEffectobj) { | ||
|  |             L_sq_SetDrawImgModel(2, 0); | ||
|  |             L_sq_DrawImg("interface/Lenheartwindowcommon.img", 353, TopEffectobj.X - 1, TopEffectobj.Y - 1, 0, sq_RGBA(255, 255, 255, 250), Rate, Rate); | ||
|  |             L_sq_ReleaseDrawImgModel(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawExTopEffect(obj) { | ||
|  |         if (ExTopEffectobj) { | ||
|  |             L_sq_SetDrawImgModel(2, 0); | ||
|  |             L_sq_DrawImg("interface/Lenheartwindowcommon.img", 353, ExTopEffectobj.X - 1, ExTopEffectobj.Y - 1, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); | ||
|  |             L_sq_ReleaseDrawImgModel(); | ||
|  | 
 | ||
|  | 
 | ||
|  |             //绘制设置说明 | ||
|  |             if (!MainState) { | ||
|  |                 local width = 200; | ||
|  |                 local QuestTipsStr = "保持按住鼠标右键,以设置技能快捷键。"; | ||
|  |                 local Color = 0xFFFFFFFF; | ||
|  |                 if ("ClickFlag" in ExTopEffectobj) { | ||
|  |                     QuestTipsStr = "请按下要设定的键盘快捷键,注意不要冲突。"; | ||
|  |                     width = 220; | ||
|  |                     Color = sq_RGBA(255, 242, 0, 250); | ||
|  |                 } | ||
|  |                 L_sq_DrawWindow(ExTopEffectobj.X - 100, ExTopEffectobj.Y - 30, width, 10, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | ||
|  |                 L_sq_DrawCode(QuestTipsStr, ExTopEffectobj.X - 94, ExTopEffectobj.Y - 25, Color, 1, 1); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawClickSkill(obj) { | ||
|  |         if (ClickInfoobj != null) { | ||
|  |             local ImgArr = split(MySkillInfoTable[ClickInfoobj].Icon[0], "\r"); | ||
|  |             L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), IMouse.GetXPos() - 14, IMouse.GetYPos() - 14, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawSlot(obj) { | ||
|  |         for (local i = 0; i< 40; i++) { | ||
|  |             DrawOneSlot((X + (30 * Rate) * (i % 10)).tointeger(), Y + ((30 * Rate) * (i / 10)).tointeger()); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawSkill(obj) { | ||
|  |         // for (local i = 0; i< 40; i++) { | ||
|  |         //     DrawOneSkill(obj, i * 2, (X + (30 * Rate) * (i % 10)).tointeger(), Y + ((30 * Rate) * (i / 10)).tointeger()); | ||
|  |         // } | ||
|  |         local i = 0; | ||
|  |         foreach(Key, Value in SettingSkillList) { | ||
|  | 
 | ||
|  |             DrawOneSkill(obj, Key, (X + (30 * Rate) * (i % 10)).tointeger(), Y + ((30 * Rate) * (i / 10)).tointeger()); | ||
|  |             i++; | ||
|  |         } | ||
|  | 
 | ||
|  |         //如果松手 选中技能清空 | ||
|  |         if (Mobj.Lb == 0) { | ||
|  |             ClickInfoobj = null; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //检查我有什么技能 | ||
|  |     function CheckMySkill(obj) { | ||
|  |         if (QuickSkillList) return; | ||
|  |         QuickSkillList = {}; | ||
|  |         SettingSkillList = {}; | ||
|  | 
 | ||
|  |         //我的技能管理器 | ||
|  |         local SkillMgr = obj.getSkillManager(); | ||
|  |         if (!SkillMgr) return; | ||
|  | 
 | ||
|  |         //遍历技能 | ||
|  |         for (local i = 1; i< 255; i++) { | ||
|  |             local SoltIndex = SkillMgr.getQuickSlotNumber(i); | ||
|  |             //在快捷技能栏槽上 | ||
|  |             if ((SoltIndex >= 0 && SoltIndex <= 6) || (SoltIndex >= 198 && SoltIndex <= 203)) { | ||
|  |                 QuickSkillList[i] <- true; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         for (local i = 0; i< 255; i++) { | ||
|  |             local Skl = sq_GetSkill(obj, i); | ||
|  |             if (Skl) { | ||
|  |                 if (sq_GetSkillLevel(obj, i) > 0 && MySkillInfoTable.rawin(i) && !(QuickSkillList.rawin(i))) { | ||
|  |                     SettingSkillList[i] <- true; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     function DrawAddExSkill(obj) { | ||
|  |         L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 532); | ||
|  |         L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 564); | ||
|  | 
 | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 485, 532, 30, 30)) { | ||
|  |             local T = { | ||
|  |                 X = 485, | ||
|  |                 Y = 534 | ||
|  |             } | ||
|  |             ExTopEffectobj = T; | ||
|  |             //如果松手 选中技能清空 | ||
|  |             if (Mobj.Lb == 0 && ClickInfoobj != null) { | ||
|  |                 Add_Ex_Slot1 = ClickInfoobj; | ||
|  |                 ClickInfoobj = null; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (Mobj.Rb == 1) { | ||
|  |                 ExTopEffectobj.ClickFlag <- true; | ||
|  |                 if (SettingKeyCodeBuffer) { | ||
|  |                     Add_Ex_Slot1_Key = SettingKeyCodeBuffer; | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 SettingKeyCodeBuffer = null; | ||
|  |             } | ||
|  |         } | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 485, 564, 30, 30)) { | ||
|  |             local T = { | ||
|  |                 X = 485, | ||
|  |                 Y = 566 | ||
|  |             } | ||
|  |             ExTopEffectobj = T; | ||
|  |             //如果松手 选中技能清空 | ||
|  |             if (Mobj.Lb == 0 && ClickInfoobj != null) { | ||
|  |                 Add_Ex_Slot2 = ClickInfoobj; | ||
|  |                 ClickInfoobj = null; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (Mobj.Rb == 1) { | ||
|  |                 ExTopEffectobj.ClickFlag <- true; | ||
|  |                 if (SettingKeyCodeBuffer) { | ||
|  |                     Add_Ex_Slot2_Key = SettingKeyCodeBuffer; | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 SettingKeyCodeBuffer = null; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         //绘制技能图标 | ||
|  |         if (Add_Ex_Slot1) { | ||
|  |             local ImgArr = split(MySkillInfoTable[Add_Ex_Slot1].Icon[0], "\r"); | ||
|  |             L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), 485, 534, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); | ||
|  |             local skl = sq_GetSkill(obj, Add_Ex_Slot1); | ||
|  |             if (skl.isInCoolTime()) { | ||
|  |                 //这里是总冷却时间 | ||
|  |                 local cooltime = skl.getCoolTime(obj, -1); | ||
|  |                 local Rate = sq_GetUniformVelocity(30, 0, (Clock() - Add_Ex_Slot1_Use_Time), cooltime); | ||
|  |                 setClip(485, 532, 485 + 30, 532 + Rate); //开始裁切 | ||
|  |                 L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 532); | ||
|  |                 releaseClip(); //裁切结束 | ||
|  |             } | ||
|  |         } | ||
|  |         if (Add_Ex_Slot2) { | ||
|  |             local ImgArr = split(MySkillInfoTable[Add_Ex_Slot2].Icon[0], "\r"); | ||
|  |             L_sq_DrawImg(ImgArr[0], ImgArr[1].tointeger(), 485, 566, 0, sq_RGBA(255, 255, 255, 250), 1.0, 1.0); | ||
|  |             local skl = sq_GetSkill(obj, Add_Ex_Slot2); | ||
|  |             if (skl.isInCoolTime()) { | ||
|  |                 //这里是总冷却时间 | ||
|  |                 local cooltime = skl.getCoolTime(obj, -1); | ||
|  |                 local Rate = sq_GetUniformVelocity(30, 0, (Clock() - Add_Ex_Slot2_Use_Time), cooltime); | ||
|  |                 setClip(485, 566, 485 + 30, 566 + Rate); //开始裁切 | ||
|  |                 L_sq_DrawImg("interface/Lenheartwindowcommon.img", 57, 485, 566); | ||
|  |                 releaseClip(); //裁切结束 | ||
|  |             } | ||
|  |         } | ||
|  |         //绘制按键角标 | ||
|  |         if (Add_Ex_Slot1_Key) { | ||
|  |             local Code = GetDrawCode(Add_Ex_Slot1_Key); | ||
|  |             L_sq_DrawImg("interface/keyshortcut.img", Code, 485, 534); | ||
|  |         } | ||
|  |         if (Add_Ex_Slot2_Key) { | ||
|  |             local Code = GetDrawCode(Add_Ex_Slot2_Key); | ||
|  |             L_sq_DrawImg("interface/keyshortcut.img", Code, 485, 566); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function GetDrawCode(Code) { | ||
|  |         //小键盘按键 | ||
|  |         if (Code >= 96 && Code <= 105) { | ||
|  |             Code -= 61; | ||
|  |             return Code; | ||
|  |         } | ||
|  |         //英文字母 | ||
|  |         if (Code >= 65 && Code <= 90) { | ||
|  |             Code -= 10; | ||
|  |             return Code; | ||
|  |         } | ||
|  |         //F1 - 9 | ||
|  |         if (Code >= 112 && Code <= 123) { | ||
|  |             Code -= 31; | ||
|  |             return Code; | ||
|  |         } | ||
|  | 
 | ||
|  |         switch (Code) { | ||
|  |             //左 | ||
|  |             case 37: | ||
|  |                 return 0; | ||
|  |                 //右 | ||
|  |             case 39: | ||
|  |                 return 1; | ||
|  |                 //上 | ||
|  |             case 38: | ||
|  |                 return 2; | ||
|  |                 //下 | ||
|  |             case 40: | ||
|  |                 return 3; | ||
|  |                 //Ctrl | ||
|  |             case 17: | ||
|  |                 return 4; | ||
|  |                 //shift | ||
|  |             case 16: | ||
|  |                 return 7; | ||
|  |                 //alt | ||
|  |             case 18: | ||
|  |                 return 10; | ||
|  |                 //空格 | ||
|  |             case 32: | ||
|  |                 return 13; | ||
|  |                 //Tab | ||
|  |             case 9: | ||
|  |                 return 31; | ||
|  |                 //大写键 | ||
|  |             case 20: | ||
|  |                 return 32; | ||
|  |         } | ||
|  | 
 | ||
|  |         return Code; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     function DrawMain(obj) { | ||
|  |         //绘制技能格子 | ||
|  |         DrawSlot(obj); | ||
|  |         //绘制技能 | ||
|  |         DrawSkill(obj); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         //绘制悬停特效 | ||
|  |         DrawTopEffect(obj); | ||
|  |         //绘制点击技能 | ||
|  |         DrawClickSkill(obj); | ||
|  |     } | ||
|  | 
 | ||
|  |     X = 290; | ||
|  |     Y = 440; | ||
|  |     MainState = false; | ||
|  |     WindowObj = null; | ||
|  | 
 | ||
|  |     function WindowLogic(obj) { | ||
|  |         if (MainState) { | ||
|  |             if (WindowObj) { | ||
|  |                 DrawMain(obj); | ||
|  |                 WindowObj.Show(obj); | ||
|  |                 X = WindowObj.X; | ||
|  |                 Y = WindowObj.Y; | ||
|  |             } else { | ||
|  |                 WindowObj = LenheartWindow(X, Y, 226, 90, 0); //坐标 大小 标题栏高度 | ||
|  |                 // WindowObj.DeBugMode = true; | ||
|  |             } | ||
|  |         } else { | ||
|  |             if (WindowObj && WindowObj.YMouseSw == false) { | ||
|  |                 IMouse.ReleaseMouseClick(); | ||
|  |                 WindowObj.YMouseSw = true; | ||
|  |                 WindowObj = null; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     Add_Ex_Slot1_Push_Flag = false; | ||
|  |     Add_Ex_Slot1_Push_Array = null; | ||
|  |     Add_Ex_Slot1_Use_Time = null; | ||
|  | 
 | ||
|  |     Add_Ex_Slot2_Push_Flag = false; | ||
|  |     Add_Ex_Slot2_Push_Array = null; | ||
|  |     Add_Ex_Slot2_Use_Time = null; | ||
|  |     //技能按键逻辑 | ||
|  |     function SkillKeyInput(obj) { | ||
|  |         if (sq_GetCurrentModuleType() == 1) return; | ||
|  |         local A_Flag = L_sq_IsKeyDown(Add_Ex_Slot1_Key); | ||
|  |         if (!Add_Ex_Slot1_Push_Flag) { | ||
|  |             if (A_Flag) { | ||
|  |                 Add_Ex_Slot1_Push_Flag = A_Flag; | ||
|  |                 Add_Ex_Slot1_Push_Array = [ | ||
|  |                     [DIK_RIGHT, DIK_Z] | ||
|  |                 ]; | ||
|  |             } | ||
|  |         } else { | ||
|  |             if (!A_Flag) Add_Ex_Slot1_Push_Flag = A_Flag; | ||
|  |         } | ||
|  | 
 | ||
|  |         local B_Flag = L_sq_IsKeyDown(Add_Ex_Slot2_Key); | ||
|  |         if (!Add_Ex_Slot2_Push_Flag) { | ||
|  |             if (B_Flag) { | ||
|  |                 Add_Ex_Slot2_Push_Flag = B_Flag; | ||
|  |                 Add_Ex_Slot2_Push_Array = [ | ||
|  |                     [DIK_RIGHT, DIK_Z] | ||
|  |                 ]; | ||
|  |                 //TODO 这里判断面向给一次数组 | ||
|  |             } | ||
|  |         } else { | ||
|  |             if (!B_Flag) Add_Ex_Slot2_Push_Flag = B_Flag; | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //技能释放逻辑 | ||
|  |     function SkillUse(obj) { | ||
|  |         if (Add_Ex_Slot1_Push_Array) { | ||
|  |             local Arr = Add_Ex_Slot1_Push_Array; | ||
|  |             if (Arr.len() > 0) { | ||
|  |                 if (typeof(Arr[0]) == "array") { | ||
|  |                     foreach(Key in Arr[0]) { | ||
|  |                         L_sq_UseSkill(Key); | ||
|  |                     } | ||
|  |                 } else { | ||
|  |                     L_sq_UseSkill(Arr[0]); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 //有队列就清队列 但最后一位不清 | ||
|  |                 if (Arr.len() > 1) Add_Ex_Slot1_Push_Array.remove(0); | ||
|  |                 else { | ||
|  |                     //只剩技能键的时候判断是否松开在清 | ||
|  |                     if (!Add_Ex_Slot1_Push_Flag) { | ||
|  |                         Add_Ex_Slot1_Push_Array.remove(0); | ||
|  |                         Add_Ex_Slot1_Use_Time = Clock(); | ||
|  |                     } | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 Add_Ex_Slot1_Push_Array = null; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         if (Add_Ex_Slot2_Push_Array) { | ||
|  |             local Arr = Add_Ex_Slot2_Push_Array; | ||
|  |             if (Arr.len() > 0) { | ||
|  |                 if (typeof(Arr[0]) == "array") { | ||
|  |                     foreach(Key in Arr[0]) { | ||
|  |                         L_sq_UseSkill(Key); | ||
|  |                     } | ||
|  |                 } else { | ||
|  |                     L_sq_UseSkill(Arr[0]); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 //有队列就清队列 但最后一位不清 | ||
|  |                 if (Arr.len() > 1) Add_Ex_Slot2_Push_Array.remove(0); | ||
|  |                 else { | ||
|  |                     //只剩技能键的时候判断是否松开在清 | ||
|  |                     if (!Add_Ex_Slot2_Push_Flag) { | ||
|  |                         Add_Ex_Slot2_Push_Array.remove(0); | ||
|  |                         Add_Ex_Slot2_Use_Time = Clock(); | ||
|  |                     } | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 Add_Ex_Slot2_Push_Array = null; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function Proc(obj) { | ||
|  |         TopEffectobj = null; | ||
|  |         ExTopEffectobj = null; | ||
|  | 
 | ||
|  |         //绘制拓展技能 | ||
|  |         DrawAddExSkill(obj); | ||
|  |         DrawExTopEffect(obj); | ||
|  |         //窗口逻辑 | ||
|  |         WindowLogic(obj); | ||
|  |         //技能按键逻辑 | ||
|  |         SkillKeyInput(obj); | ||
|  |         //技能释放逻辑 | ||
|  |         SkillUse(obj); | ||
|  | 
 | ||
|  |         // MainState = true; | ||
|  |         // sq_DrawBox(X, Y + 66, 224, 26, 0xffffffff); | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y + 66, 224, 26)) { | ||
|  |             CheckMySkill(obj); | ||
|  |             MainState = true; | ||
|  |         } else { | ||
|  |             if (MainState) { | ||
|  |                 if (!sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 226, 90 + 62)) { | ||
|  |                     MainState = false; | ||
|  |                     QuickSkillList = null; | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 MainState = false; | ||
|  |                 QuickSkillList = null; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //技能新增系统 | ||
|  | function Lenheart_100UI_DrawSkillAddSystem(obj) { | ||
|  | 
 | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("Lenheart_100UI_DrawSkillAddClassCObj")) { | ||
|  |         local Cobj = Lenheart_100UI_DrawSkillAddClassC(); | ||
|  |         RootTab.rawset("Lenheart_100UI_DrawSkillAddClassCObj", Cobj); | ||
|  |     } else { | ||
|  |         RootTab["Lenheart_100UI_DrawSkillAddClassCObj"].Proc(obj); | ||
|  |     } | ||
|  | 
 | ||
|  | } |