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);
 | |
|     }
 | |
| 
 | |
| } |