2024-03-18 21:37:40 +08:00
|
|
|
/*
|
|
|
|
|
文件名: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) {
|
|
|
|
|
|
2024-03-25 20:51:30 +08:00
|
|
|
// Lenheart_100UI_DrawSkillAddSystem(obj);
|
2024-03-18 21:37:40 +08:00
|
|
|
|
|
|
|
|
//悬停层绘制
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|