/* 文件名:Ptst.nut 路径:Plugins/Ptst/Ptst.nut 创建日期:2023-03-15 13:50 文件用途:护石系统 */ //TabTextButtonPro按钮类 class PtstTabTextButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 { obj = null; //Obj对象 State = 0; //按钮状态 ClickEnble = false; //点击效果 ButtonDynamic = false; //动态按钮效果 SwitchState = false; //复选框是否选中 str = null; strx = null; stry = null; CustomClickEnble = false; //自定义点击效果 CustomClickAnifile = null; //自定义点击效果Ani路径 CustomButtonName = null; //自定义点击效果名称 CustomClickFrame = null; //自定义点击效果Ani编号 CustomClickx = null; //自定义点击效果X坐标 CustomClicky = null; //自定义点击效果Y坐标 RectEnble = false; //悬停效果 RectButtonName = null; //悬停名称 RectBaseAnifile = null; //悬停Ani路径 RectFrame = null; //非动态按钮的悬停调用Ani编号 Rectx = null; //悬停X坐标 Recty = null; //悬停Y坐标 ButtonName = null; //按钮名称 x = null; //X坐标 y = null; //Y坐标 BaseAnifile = null; //调用Ani路径 BaseAnifileFrame = null; //调用的Ani帧数 width = null; //可点击宽度 length = null; //可点击高度 Mobj = null; //鼠标对象 //构造函数 constructor(gObj, gButtonName, gX, gY, gAnifile, gBaseAnifileFrame, gWidth, gLength, gstr, gstrx, gstry) { obj = gObj; ButtonName = gButtonName; x = gX; y = gY; BaseAnifile = gAnifile; BaseAnifileFrame = gBaseAnifileFrame; width = gWidth; length = gLength; str = gstr; strx = gstrx; stry = gstry; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } //绘制按钮 function Show() { if (ClickEnble) //是否开启点击效果 { if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 { State = 1; //按键进入按下状态 //++y; } if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 { State = 0; //按键进入弹起状态 //--y; } } if (CustomClickEnble) //是否开启自定义点击效果 { if (isLBDown() && SwitchState == false) //按下左键并且按钮处于弹起状态 { if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); } } if (RectEnble && SwitchState == false) //开启悬停效果时 { if ((isInRect()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 { //IMouse.SetMouseTask(44); if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); } } if (!isInRect() && !SwitchState) //如果鼠标没有悬停的时候 { //IMouse.SetMouseTask(0); if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseAnifileFrame, ButtonName); else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(221, 197, 147, 250), 1, 1); } if (SwitchState) { if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); L_sq_DrawCode(str, CustomClickx + strx, CustomClicky + stry, sq_RGBA(255, 255, 184, 250), 1, 1); } } //设置自定义点击效果 function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { CustomClickEnble = bool; //自定义点击效果 CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 CustomButtonName = gButtonName; //自定义点击效果名称 CustomClickFrame = gFrame; //自定义点击效果Ani编号 CustomClickx = gX; //自定义点击效果X坐标 CustomClicky = gY; //自定义点击效果Y坐标 } //设置悬停效果 function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { RectEnble = bool; //悬停效果 RectButtonName = gButtonName; //悬停名称 RectBaseAnifile = gAnifile; //悬停Ani路径 RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 Rectx = gX; //悬停X坐标 Recty = gY; //悬停Y坐标 } //设置动态按钮 function SetClickEnble(bool) { ButtonDynamic = bool; } //设置点击效果 function SetClickEnble(bool) { ClickEnble = bool; } //悬停状态 function isInRect() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; else return false; } //左键按下状态 function isLBDown() { if (isInRect() && Mobj.Lb == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && Mobj.Lb == 0) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && Mobj.LbEvent) return true; else return false; } //左键双击状态 function IsLBDoubleClick() { if (isInRect() && IMouse.GetLButton() == 64) return true; else return false; } } //HudPro按钮类 class PtstButtonPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 { obj = null; //Obj对象 State = 0; //按钮状态 ClickEnble = false; //点击效果 ButtonDynamic = false; //动态按钮效果 BaseFrame = null; CustomClickEnble = false; //自定义点击效果 CustomClickAnifile = null; //自定义点击效果Ani路径 CustomButtonName = null; //自定义点击效果名称 CustomClickFrame = null; //自定义点击效果Ani编号 CustomClickx = null; //自定义点击效果X坐标 CustomClicky = null; //自定义点击效果Y坐标 RectEnble = false; //悬停效果 RectButtonName = null; //悬停名称 RectBaseAnifile = null; //悬停Ani路径 RectFrame = null; //非动态按钮的悬停调用Ani编号 Rectx = null; //悬停X坐标 Recty = null; //悬停Y坐标 ButtonName = null; //按钮名称 x = null; //X坐标 y = null; //Y坐标 BaseAnifile = null; //调用Ani路径 width = null; //可点击宽度 length = null; //可点击高度 Mobj = null; //鼠标对象 //构造函数 constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { obj = gObj; ButtonName = gButtonName; x = gX; y = gY; BaseAnifile = gAnifile; width = gWidth; length = gLength; BaseFrame = gBaseFrame; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } //绘制按钮 function Show() { if (ClickEnble) //是否开启点击效果 { if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 { State = 1; //按键进入按下状态 ++y; } if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 { State = 0; //按键进入弹起状态 --y; } } if (CustomClickEnble) //是否开启自定义点击效果 { if (isLBDown()) //按下左键并且按钮处于弹起状态 { if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); } } if (RectEnble) //开启悬停效果时 { if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 { //IMouse.SetMouseTask(44); if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); } } if (!isInRect()) //如果鼠标没有悬停的时候 { //IMouse.SetMouseTask(0); if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); } } //设置自定义点击效果 function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { CustomClickEnble = bool; //自定义点击效果 CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 CustomButtonName = gButtonName; //自定义点击效果名称 CustomClickFrame = gFrame; //自定义点击效果Ani编号 CustomClickx = gX; //自定义点击效果X坐标 CustomClicky = gY; //自定义点击效果Y坐标 } //设置悬停效果 function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { RectEnble = bool; //悬停效果 RectButtonName = gButtonName; //悬停名称 RectBaseAnifile = gAnifile; //悬停Ani路径 RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 Rectx = gX; //悬停X坐标 Recty = gY; //悬停Y坐标 } //设置动态按钮 function SetClickEnble(bool) { ButtonDynamic = bool; } //设置点击效果 function SetClickEnble(bool) { ClickEnble = bool; } //悬停状态 function isInRect() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; else return false; } //左键按下状态 function isLBDown() { if (isInRect() && Mobj.Lb == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && Mobj.Lb == 0) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && Mobj.LbEvent) return true; else return false; } //左键双击状态 function IsLBDoubleClick() { if (isInRect() && IMouse.GetLButton() == 64) return true; else return false; } } class PtstItem extends BasicsDrawTool { X = null; Y = null; ItemId = null; Attribute = null; MCount = 0; Rarity = null; Explain = null; TabName = ["名称: ", "强化等级: ", "力量 +", "体力 +", "智力 +", "精神 +", "独立攻击力 +", "物理攻击力 +", "魔法攻击力 +", "物理防御 +", "魔法防御 +", "移动速度 +", "攻击速度 +", "释放速度 +", "物理暴击 +", "魔法暴击 +", "命中率 +", "光属性强化 +", "暗属性强化 +", "水属性强化 +", "火属性强化 +", "全属性强化 +" ] constructor(Id, attribute, rarity, explain) { ItemId = Id; Attribute = attribute; Rarity = rarity; Explain = explain.tostring(); } //获取字符串行数 function GetStrLine(str) { local line = 0; local Bpos = 0; while (true) { local Npos = str.find("\n", Bpos); if (!Npos) { ++line; break; } ++line; Bpos = Npos + 1; } return line; } //高级绘制文字(带换行) function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) { local strarr = []; if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); else { local Bpos = 0; while (true) { local Npos = str.find("\n", Bpos); if (!Npos) { local strbuff = str.slice(Bpos, str.len()); strarr.append(strbuff); break; } local strbuff = str.slice(Bpos, Npos); strarr.append(strbuff); Bpos = Npos + 1; } for (local z = 0; z < strarr.len(); z++) { L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); } } } //绘制悬停 function DrawHover(obj) { local dx; local dy; local line = Attribute.len() - 3; //减去名字 强化之类的偏移 //悬停界面总高度计算 { local X1 = 0; //防御力线偏移 local X2 = 0; //四维和三攻线偏移 local X3 = 0; //三速线偏移 local X4 = 0; //属强线偏移 local X5 = 0; //全属强线偏移 MCount = 0; for (local y = 0; y < Attribute.len(); y++) { local gType = Attribute[y][0]; //防御力 if (gType == 9 || gType == 10) X1 = 1; //四维和三攻 if (gType >= 2 && gType <= 8) X2 = 1; //三速 if (gType >= 11 && gType <= 16) X3 = 1; //属强 if (gType >= 17 && gType <= 20) X4 = 1; //全属强 if (gType == 21) X5 = 1; //守护珠数量 if (gType >= 22 && gType <= 25) MCount++; } local ExplainLine = GetStrLine(Explain); line = line + X1 + X2 + X3 + X4 + X5 + 1 - MCount + ExplainLine; //总共需要的长度 } //界面是否靠近边界偏移计算 { if ((800 - X) >= 216) dx = X; else dx = X - (216 - (800 - X)); local needY = 19 + (line * 14) + 19; if ((600 - Y) >= needY) dy = Y; else dy = Y - (needY - (600 - Y)); dx += 45; dy -= 25; } //主界面绘制 { //绘制顶 T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy, 25, "PtstItemInfoMainTopa"); //绘制线 T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy + 19, 26, "PtstItemInfoMainXiana"); //绘制中 for (local i = 0; i < line; i++) { T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy + 19 + 14 + (i * 14), 27, "PtstItemInfoMainZhong"); } //绘制底 T_DrawStayAni(obj, "common/ptst/main.ani", dx, dy + 19 + 14 + (line * 14), 28, "PtstItemInfoMainDi"); if (MCount > 0) L_sq_DrawCode("[ 已镶嵌守护珠: " + MCount + " ]", dx + 6, dy + 19 + 16 + (line * 14), sq_RGBA(255, 177, 0, 250), 1, 1); } //获取颜色 local Colorobj = getroottable()["PtstObj"].ColorArr[Rarity]; local RGBADATA = sq_RGBA(Colorobj[0], Colorobj[1], Colorobj[2], Colorobj[3]); //绘制名字 L_sq_DrawCode(Attribute[0][1], dx + 6, dy + 6, RGBADATA, 1, 1); //绘制描述 L_sq_DrawCode_Ex("" + Explain, dx + 6, dy + 6 + 30, sq_RGBA(255, 255, 255, 250), 1, 1, 20); //绘制强化等级 if (Attribute[1][1] != 0) L_sq_DrawCode("强化等级: " + Attribute[1][1], dx + 140, dy + 6, sq_RGBA(255, 177, 0, 250), 1, 1); //线的数量 local XianCount = 0; local FYS = false; //防御属性是否绘制判断 local SWS = false; //四维属性是否绘制判断 local SGS = false; //三攻属性是否绘制判断 local SSS = false; //三速属性是否绘制判断 local SQS = false; //属强属性是否绘制判断 local cx = dx + 6; //起始点偏移(要从名字下面的线开始绘制) local cy = dy + 20; //起始点偏移(要从名字下面的线开始绘制) local o = 2; //属性剔除前2无用属性 local RGBA; //根据不同的属性绘制不同颜色字体 //防御属性 for (; o < Attribute.len(); o++) { local gType = Attribute[o][0]; //如果不属于防御属性就终止 if (gType != 9 && gType != 10) break; RGBA = sq_RGBA(119, 110, 95, 250); local gTabName = TabName[gType]; local gValue = Attribute[o][1]; L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + ((o - 1) * 15), RGBA, 1, 1); FYS = true; if (o == (Attribute.len() - 1 - MCount)) return; } //绘制线 if (FYS) { T_DrawStayAni(obj, "common/ptst/main.ani", dx, cy + ((o - 1) * 15) + (XianCount * 14), 29, "PtstItemInfoMainXianT"); XianCount++; } //四维属性 for (; o < Attribute.len(); o++) { local gType = Attribute[o][0]; //如果不属于四维属性就终止 if (gType < 2 || gType > 5) break; RGBA = sq_RGBA(141, 140, 109, 250); local gTabName = TabName[gType]; local gValue = Attribute[o][1]; L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); SWS = true; if (o == (Attribute.len() - 1 - MCount)) return; } //三攻属性 for (; o < Attribute.len(); o++) { local gType = Attribute[o][0]; //如果不属于三攻属性就终止 if (gType < 6 || gType > 8) break; RGBA = sq_RGBA(255, 255, 216, 200); local gTabName = TabName[gType]; local gValue = Attribute[o][1]; L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); SGS = true; if (o == (Attribute.len() - 1 - MCount)) return; } if ((SGS || SWS) && (o < Attribute.len())) { //绘制线 T_DrawStayAni(obj, "common/ptst/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "PtstItemInfoMainXianT"); XianCount++; } //三速属性 for (; o < Attribute.len(); o++) { local gType = Attribute[o][0]; //如果不属于三速属性就终止 if (gType < 11 || gType > 16) break; RGBA = sq_RGBA(166, 215, 136, 250); local gTabName = TabName[gType]; local gValue = Attribute[o][1].tofloat() / 10.0; L_sq_DrawCode(gTabName + gValue.tostring() + "%", cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); SSS = true; if (o == (Attribute.len() - 1 - MCount)) return; } if (SSS) { //绘制线 T_DrawStayAni(obj, "common/ptst/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "PtstItemInfoMainXianT"); XianCount++; } //属强属性 for (; o < Attribute.len(); o++) { local gType = Attribute[o][0]; //如果不属于属强属性就终止 if (gType < 17 || gType > 20) break; RGBA = sq_RGBA(240, 230, 135, 250); local gTabName = TabName[gType]; local gValue = Attribute[o][1]; L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); SQS = true; if (o == (Attribute.len() - 1 - MCount)) return; } if (SQS) XianCount++; //全属强属性 for (; o < Attribute.len(); o++) { local gType = Attribute[o][0]; //如果不属于全属强属性就终止 if (gType != 21) break; RGBA = sq_RGBA(255, 177, 0, 250); local gTabName = TabName[gType]; local gValue = Attribute[o][1]; L_sq_DrawCode(gTabName + gValue.tostring(), cx, cy + (XianCount * 14) + ((o - 1) * 15), RGBA, 1, 1); if (o == (Attribute.len() - 1 - MCount)) return; } } function Run(x, y) { X = x; Y = y; L_Sq_DrawItem(x, y, ItemId, 1, 0, 0, 0); } } class PtstSlot extends BasicsDrawTool { Type = null; X = null; Y = null; Item = null; ItemM = null; Select = false; SlotName = null; Tobj = null; Mobj = null; constructor(type) { Type = type; local RootTab = getroottable(); Tobj = RootTab["PtstObj"]; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } function IsHover() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 28, 28)) { //因为拖拽的时候会有两个重叠 所以要判断不是当前拿着的物品 if (Tobj.MoveModel != SlotName) Tobj.HoverModel = SlotName; return true; } else return false; } //左键按下状态 function isLBDown(obj) { if (IsHover() && Mobj.Lb == 1) { obj.getVar(SlotName + "L").setBool(1, true); return true; } else return false; } //左键弹起状态 function isLBUp(obj) { if (Mobj.Lb == 0) { obj.getVar(SlotName + "L").setBool(1, false); return true; } else return false; } //右键按下状态 function isRBDown(obj) { if (IsHover() && Mobj.Rb == 1) { obj.getVar(SlotName + "R").setBool(1, true); return true; } else return false; } //右键单击状态 function isRBActive(obj) { if (IsHover() && Mobj.RbEvent && obj.getVar(SlotName + "R").getBool(1) == true) { obj.getVar(SlotName + "R").setBool(1, false); return true; } else return false; } function DrawHover(obj) { if (SlotName >= 30 && SlotName <= 38) { //绘制悬停槽蓝光 if (Item) { T_DrawStayAni(obj, "common/ptst/main.ani", X + 7, Y + 7, Type, "PtstSlotHover" + Type); } } else { //绘制悬停槽蓝光 T_DrawStayAni(obj, "common/ptst/main.ani", X, Y, Type, "PtstSlotHover" + Type); } } //第一图层 function Show(obj, x, y, slot) { SlotName = slot; if (Tobj.MoveModel != SlotName) { X = x; Y = y; } else { X = IMouse.GetXPos() - 14; Y = IMouse.GetYPos() - 14; } if (slot >= 30 && slot <= 38) { if (Item) { T_DrawStayAni(obj, "common/ptst/main.ani", x, y, 6, "PtstSystemMainSlot2"); T_DrawDynamicAni(obj, "common/ptst/ani/" + slot + ".ani", 114 + (X * 0.05).tointeger(), 69 + (Y * 0.05).tointeger(), "PtstSystemgx" + slot); } else { //T_DrawStayAni(obj, "common/ptst/main.ani", x, y, 6, "PtstSystemMainSlot2"); } //T_DrawDynamicAni(obj, "common/ptst/ani/" + slot + ".ani", X - 46, Y - 24, "PtstSystemgx" + slot); if (Item && Tobj.MoveModel != SlotName) Item.Run(X + 7, Y + 6); } else { //如果有勋章对象则执行 if (Item && Tobj.MoveModel != SlotName) Item.Run(X, Y); } //如果悬停 if (IsHover()) { //绘制背景蓝光 移动时绘制蓝光要在图标底下 if (Tobj.MoveModel != SlotName) DrawHover(obj); isRBDown(obj); //如果右键穿戴 if (Item && isRBActive(obj)) { local UsePtstPack = Json_STL("UsePtstPack"); UsePtstPack.Put("op", 29991003); UsePtstPack.Put("sel_type", Tobj.State); UsePtstPack.Put("old_slot", slot); if (slot <= 24) UsePtstPack.Put("new_slot", 88); //if (slot > 88) UsePtstPack.Put("new_slot", 999999); if (slot > 24) UsePtstPack.Put("new_slot", 999999); UsePtstPack.Put("page", Tobj.NowPage); UsePtstPack.Put("type", Tobj.State); local str = UsePtstPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); UsePtstPack.Delete(); } } //如果左键按下 写入可移动状态 if (Item && isLBDown(obj) && Tobj.MoveModel == null && slot < 88) { Tobj.MoveModel = SlotName; } //如果左键弹起 写入静止状态 if (isLBUp(obj) && Tobj.MoveModel != null) { local MovePtstPack = Json_STL("MovePtstPack"); MovePtstPack.Put("op", 29991003); MovePtstPack.Put("sel_type", Tobj.State); MovePtstPack.Put("old_slot", Tobj.MoveModel.tointeger()); MovePtstPack.Put("new_slot", Tobj.HoverModel.tointeger()); MovePtstPack.Put("page", Tobj.NowPage); local str = MovePtstPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); MovePtstPack.Delete(); Tobj.MoveModel = null; } } //第二图层 function ItemShow(obj) { if (IsHover() && Tobj.MoveModel == null) { if (Item) Item.DrawHover(obj); } } //第三图层 拖动物品时的最高图层绘制 function ItemMoveShow(obj) { if (Item && Tobj.MoveModel == SlotName) Item.Run(X, Y); } } class PtstWindow extends BasicsDrawTool { //宽度 Width = null; //高度 Height = null; //标题高度 TitleH = null; //X坐标 X = null; B_X = null; //Y坐标 Y = null; B_Y = null; YMouseSw = true; DeBugMode = false; Mobj = null; M_Xpos = null; M_Ypos = null; constructor(gX, gY, gWidth, gHeight, gTitleH) { //宽度 Width = gWidth; //高度 Height = gHeight; //标题高度 TitleH = gTitleH; //X坐标 X = gX; //Y坐标 Y = gY; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } //设定鼠标逻辑 function LockMouse() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { IMouse.LockMouseClick(); YMouseSw = false; } else { if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { IMouse.ReleaseMouseClick(); YMouseSw = true; } } } //设定窗口拖动逻辑 function MoveWindow() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { if (Mobj.Lb == 1) { if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 if (!M_Ypos) M_Ypos = IMouse.GetYPos(); if (!B_X) B_X = X; //原始窗口位置 if (!B_Y) B_Y = Y; X = B_X - (M_Xpos - IMouse.GetXPos()); Y = B_Y - (M_Ypos - IMouse.GetYPos()); } else if (Mobj.Lb == 0) { M_Xpos = null; M_Ypos = null; B_X = null; B_Y = null; } } } function Show(obj) { if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); //设定鼠标逻辑 LockMouse(); //设定窗口拖动逻辑 MoveWindow(); } } class PtstC extends BasicsDrawTool { WindowObj = null; //窗口对象 MainState = false; //主状态 X = 120; Y = 50; Sw = true; State = 24; CheckGetMyPtstInfo = false; PtstButton = null; PtstButtonSwitch = true; BeadButton = null; BeadButtonSwitch = false; BuffSet = false; //背包格子 SlotB = null; //移动对象 MoveModel = null; //悬停对象 HoverModel = null; //最大页数 Json获取 MaxPage = 5; //当前页数 Json获取 NowPage = 1; //颜色 ColorArr = null; C_Slot0 = null; C_Slot1 = null; C_Slot2 = null; C_Slot3 = null; C_Slot4 = null; C_Slot5 = null; C_Slot6 = null; C_Slot7 = null; C_Slot8 = null; A_Slot0 = null; A_Slot1 = null; A_Slot2 = null; constructor() { //注册配置类信息回调 Pack_Control.rawset(29991998, SetBaseInfoCallBack); //请求配置信息 GetBaseInfo(); SlotB = []; SlotB.resize(24); //注册获取背包信息回调 Pack_Control.rawset(29991002, GetMyPtstInfoCallBack); //注册穿戴回调 Pack_Control.rawset(29991012, GetMyWearPtstCallBack); //初始请求背包信息 F_GetMyPtstInfo(24, 1); } //穿戴信息回调 function GetMyWearPtstCallBack(Chunk) { //收到打开包 local Buffer = Json_STL("GetMyPtstInfoBuffer"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("PtstObj")) { local Tobj = RootTab["PtstObj"]; //清空勋章对象 Tobj.A_Slot0.Item = null; Tobj.A_Slot1.Item = null; Tobj.A_Slot2.Item = null; Tobj.C_Slot0.Item = null; Tobj.C_Slot1.Item = null; Tobj.C_Slot2.Item = null; Tobj.C_Slot3.Item = null; Tobj.C_Slot4.Item = null; Tobj.C_Slot5.Item = null; Tobj.C_Slot6.Item = null; Tobj.C_Slot7.Item = null; Tobj.C_Slot8.Item = null; /* //清空守护珠对象组 for (local w = 0; w < 4; w++) { Tobj.WearSlotB[w].Item = null; } */ for (local w = 0; w < 3; w++) { local dataarrsize = Buffer.Get("data->" + w + "->dataarrsize"); if (dataarrsize) { local dataarr = []; for (local z = 0; z < dataarrsize; z++) { local arrbuufer = []; local a = Buffer.Get("data->" + w + "->stk_ab->" + z + "->0"); local b = Buffer.Get("data->" + w + "->stk_ab->" + z + "->1"); arrbuufer.append(a); arrbuufer.append(b); dataarr.append(arrbuufer); } local rarity = Buffer.Get("data->" + w + "->rarity"); local explain = Buffer.Get("data->" + w + "->explain"); local slot = Buffer.Get("data->" + w + "->slot"); if (slot == 0) Tobj.A_Slot0.Item = PtstItem(Buffer.Get("data->" + w + "->stk_id"), dataarr, rarity, explain); if (slot == 1) Tobj.A_Slot1.Item = PtstItem(Buffer.Get("data->" + w + "->stk_id"), dataarr, rarity, explain); if (slot == 2) Tobj.A_Slot2.Item = PtstItem(Buffer.Get("data->" + w + "->stk_id"), dataarr, rarity, explain); } } for (local u = 0; u < 9; u++) { local dataarrsize = Buffer.Get("fdata->" + u + "->dataarrsize"); if (dataarrsize) { local dataarr = []; for (local z = 0; z < dataarrsize; z++) { local arrbuufer = []; local a = Buffer.Get("fdata->" + u + "->stk_ab->" + z + "->0"); local b = Buffer.Get("fdata->" + u + "->stk_ab->" + z + "->1"); arrbuufer.append(a); arrbuufer.append(b); dataarr.append(arrbuufer); } local rarity = Buffer.Get("fdata->" + u + "->rarity"); local explain = Buffer.Get("fdata->" + u + "->explain"); local slot = Buffer.Get("fdata->" + u + "->slot"); if (slot == 0) Tobj.C_Slot0.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 1) Tobj.C_Slot1.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 2) Tobj.C_Slot2.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 3) Tobj.C_Slot3.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 4) Tobj.C_Slot4.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 5) Tobj.C_Slot5.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 6) Tobj.C_Slot6.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 7) Tobj.C_Slot7.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); if (slot == 8) Tobj.C_Slot8.Item = PtstItem(Buffer.Get("fdata->" + u + "->stk_id"), dataarr, rarity, explain); } } local obj = sq_GetMyMasterCharacter(); if (obj) Tobj.SetSkillData(obj); } } //请求配置信息 function GetBaseInfo() { local GetBaseInfoPack = Json_STL("GetBaseInfoPack"); GetBaseInfoPack.Put("op", 29991997); local str = GetBaseInfoPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetBaseInfoPack.Delete(); } //配置类信息回调 function SetBaseInfoCallBack(Chunk) { local Buffer = Json_STL("GetMyPtstInfoBuffer"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("PtstObj")) { local Tobj = RootTab["PtstObj"]; Tobj.MaxPage = Buffer.Get("slotpage"); Tobj.ColorArr = []; for (local i = 0; i < 8; i++) { local arrbuffer = [] arrbuffer.append(Buffer.Get("color" + i + "->0")); arrbuffer.append(Buffer.Get("color" + i + "->1")); arrbuffer.append(Buffer.Get("color" + i + "->2")); arrbuffer.append(250); Tobj.ColorArr.append(arrbuffer); } } } //首次获取背包信息 function F_GetMyPtstInfo(Type, Page) { local GetMyMedalInfoPack = Json_STL("GetMyMedalInfoPack"); GetMyMedalInfoPack.Put("op", 29991001); GetMyMedalInfoPack.Put("sel_type", Type); GetMyMedalInfoPack.Put("page", Page); GetMyMedalInfoPack.Put("wear", true); local str = GetMyMedalInfoPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetMyMedalInfoPack.Delete(); } //获取背包信息回调 function GetMyPtstInfoCallBack(Chunk) { //收到打开包 local Buffer = Json_STL("GetMyPtstInfoBuffer"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("PtstObj")) { local Tobj = RootTab["PtstObj"]; { //同步页面(勋章或守护珠) local SelType = Buffer.Get("sel_type"); Tobj.State = SelType; if (SelType == 24) { Tobj.PtstButtonSwitch = true; Tobj.BeadButtonSwitch = false; } else if (SelType == 23) { Tobj.PtstButtonSwitch = false; Tobj.BeadButtonSwitch = true; } } //Tobj.SlotArr = []; local Count = Buffer.Get("count"); for (local z = 0; z < 24; z++) { Tobj.SlotB[z].Item = null; } for (local i = 0; i < Count; i++) { local SlotPos = Buffer.Get("data->" + i + "->slot"); local dataarrsize = Buffer.Get("data->" + i + "->dataarrsize"); local dataarr = []; for (local z = 0; z < dataarrsize; z++) { local arrbuufer = []; local a = Buffer.Get("data->" + i + "->stk_ab->" + z + "->0"); local b = Buffer.Get("data->" + i + "->stk_ab->" + z + "->1"); arrbuufer.append(a); arrbuufer.append(b); dataarr.append(arrbuufer); } local rarity = Buffer.Get("data->" + i + "->rarity"); local explain = Buffer.Get("data->" + i + "->explain"); //Tobj.SlotB[SlotPos].Item = PtstItem(Buffer.Get("data->" + i + "->stk_id"), dataarr, rarity,explain,explainlen); Tobj.SlotB[SlotPos].Item = PtstItem(Buffer.Get("data->" + i + "->stk_id"), dataarr, rarity, explain); } } } //获取背包信息 function GetMyPtstInfo(Type, Page) { local GetMyPtstInfoPack = Json_STL("GetMyPtstInfoPack"); GetMyPtstInfoPack.Put("op", 29991001); GetMyPtstInfoPack.Put("sel_type", Type); GetMyPtstInfoPack.Put("page", Page); GetMyPtstInfoPack.Put("wear", false); local str = GetMyPtstInfoPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetMyPtstInfoPack.Delete(); } //绘制主界面 function DrawMain(obj) { { //底图层绘制 //窗口 T_DrawStayAni(obj, "common/ptst/main.ani", X - 120 + 120, Y - 50 + 50, 0, "PtstSystemMain"); //T_DrawStayAni(obj, "common/ptst/main.ani", X - 120 + 380, Y - 50 + 50, 1, "PtstSystemMain2"); T_DrawDynamicAni(obj, "common/ptst/mainjg.ani", X - 120 + 126, Y - 50 + 77, "PtstSystemMain4") } { //勋章和守护珠切换按钮 PtstButton = PtstTabTextButtonPro(obj, "小护石Tab", X - 120 + 5 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 2, 48, 21, " 护石", 8, 5); PtstButton.SwitchState = PtstButtonSwitch; PtstButton.SetRectEnble(true, "a护石Tab", X - 120 + 5 + 1 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 3); PtstButton.SetCustomClickEnble(true, "a护石Tab", X - 120 + 5 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 4); //勋章 PtstButton.Show(); if (PtstButton.isLBActive()) { //PtstButton.SwitchState = true; PtstButtonSwitch = true; //BeadButton.SwitchState = false; BeadButtonSwitch = false; State = 24; //清空槽对象 SlotB = []; SlotB = null; //还原页码 NowPage = 1; GetMyPtstInfo(State, NowPage); } BeadButton = PtstTabTextButtonPro(obj, "小符文Tab", X - 120 + 5 + 50 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 2, 48, 21, " 符文", 8, 5); BeadButton.SwitchState = BeadButtonSwitch; BeadButton.SetRectEnble(true, "a符文Tab", X - 120 + 5 + 51 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 3); BeadButton.SetCustomClickEnble(true, "a符文Tab", X - 120 + 5 + 50 + 129, Y - 50 + 253 + 69, "common/Ptst/main.ani", 4); //守护珠 BeadButton.Show(); if (BeadButton.isLBActive()) { PtstButton.SwitchState = false; PtstButtonSwitch = false; BeadButton.SwitchState = true; BeadButtonSwitch = true; State = 23; //清空槽对象 SlotB = []; SlotB = null; //还原页码 NowPage = 1; GetMyPtstInfo(State, NowPage); } } { //翻页 local LeftButton = PtstButtonPro(obj, "PtstLeftButton", X - 120 + 150 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 13, 9, 11); LeftButton.SetRectEnble(true, "PtstLeftButtonr", X - 120 + 150 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 13); LeftButton.SetCustomClickEnble(true, "PtstLeftButtonc", X - 120 + 150 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 12); LeftButton.Show(); if (LeftButton.isLBActive()) { //页码减少 if (NowPage > 1) NowPage--; //清空槽对象 SlotB = []; SlotB = null; GetMyPtstInfo(State, NowPage); } local RightButton = PtstButtonPro(obj, "PtstRightButton", X - 120 + 200 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 13, 9, 7); RightButton.SetRectEnble(true, "PtstRightButtonr", X - 120 + 200 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 9); RightButton.SetCustomClickEnble(true, "PtstRightButtonc", X - 120 + 200 + 39 + 110, Y - 50 + 260 + 68, "common/Ptst/main.ani", 8); RightButton.Show(); if (RightButton.isLBActive()) { //页码增加 if (NowPage < MaxPage) NowPage++; //清空槽对象 SlotB = []; SlotB = null; GetMyPtstInfo(State, NowPage); } L_sq_DrawCode(NowPage + "/" + MaxPage, X - 120 + 175 + 39 + 110, Y - 50 + 258 + 68, sq_RGBA(230, 200, 155, 250), 1, 1); } { //背包格子 //绘制 { if (!SlotB || SlotB.len() <= 0) return; //第一图层 for (local q = 0; q < 24; q++) { SlotB[q].Show(obj, X - 120 + 137 + ((q % 8) * 28), Y - 50 + 346 + ((q / 8) * 31), q); } C_Slot0.Show(obj, X - 120 + 118 + 56, Y - 50 + 48 + 55, 30); C_Slot1.Show(obj, X - 120 + 118 + 110, Y - 50 + 48 + 37, 31); C_Slot2.Show(obj, X - 120 + 118 + 164, Y - 50 + 48 + 55, 32); C_Slot3.Show(obj, X - 120 + 118 + 205, Y - 50 + 48 + 127, 33); C_Slot4.Show(obj, X - 120 + 118 + 194, Y - 50 + 48 + 182, 34); C_Slot5.Show(obj, X - 120 + 118 + 152, Y - 50 + 48 + 220, 35); C_Slot6.Show(obj, X - 120 + 118 + 68, Y - 50 + 48 + 220, 36); C_Slot7.Show(obj, X - 120 + 118 + 26, Y - 50 + 48 + 182, 37); C_Slot8.Show(obj, X - 120 + 118 + 15, Y - 50 + 48 + 127, 38); A_Slot0.Show(obj, X - 120 + 120 + 115, Y - 50 + 50 + 110, 90); A_Slot1.Show(obj, X - 120 + 120 + 90, Y - 50 + 50 + 153, 91); A_Slot2.Show(obj, X - 120 + 120 + 140, Y - 50 + 50 + 153, 92); //第二图层 for (local u = 0; u < 24; u++) { SlotB[u].ItemShow(obj); } C_Slot0.ItemShow(obj); C_Slot1.ItemShow(obj); C_Slot2.ItemShow(obj); C_Slot3.ItemShow(obj); C_Slot4.ItemShow(obj); C_Slot5.ItemShow(obj); C_Slot6.ItemShow(obj); C_Slot7.ItemShow(obj); C_Slot8.ItemShow(obj); A_Slot0.ItemShow(obj); A_Slot1.ItemShow(obj); A_Slot2.ItemShow(obj); for (local z = 0; z < 24; z++) { SlotB[z].ItemMoveShow(obj); } C_Slot0.ItemMoveShow(obj); C_Slot1.ItemMoveShow(obj); C_Slot2.ItemMoveShow(obj); C_Slot3.ItemMoveShow(obj); C_Slot4.ItemMoveShow(obj); C_Slot5.ItemMoveShow(obj); C_Slot6.ItemMoveShow(obj); C_Slot7.ItemMoveShow(obj); C_Slot8.ItemMoveShow(obj); A_Slot0.ItemMoveShow(obj); A_Slot1.ItemMoveShow(obj); A_Slot2.ItemMoveShow(obj); } } } //设置技能数据 function SetSkillData(obj) { obj = sq_ObjectToSQRCharacter(obj); ClearTalismanData(); if (A_Slot0.Item && getroottable().rawin("LenheartTalisman_" + A_Slot0.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + A_Slot0.Item.ItemId]; Func(obj); } if (A_Slot1.Item && getroottable().rawin("LenheartTalisman_" + A_Slot1.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + A_Slot1.Item.ItemId]; Func(obj); } if (A_Slot2.Item && getroottable().rawin("LenheartTalisman_" + A_Slot2.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + A_Slot2.Item.ItemId]; Func(obj); } if (C_Slot0.Item && getroottable().rawin("LenheartTalisman_" + C_Slot0.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot0.Item.ItemId]; Func(obj); } if (C_Slot1.Item && getroottable().rawin("LenheartTalisman_" + C_Slot1.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot1.Item.ItemId]; Func(obj); } if (C_Slot2.Item && getroottable().rawin("LenheartTalisman_" + C_Slot2.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot2.Item.ItemId]; Func(obj); } if (C_Slot3.Item && getroottable().rawin("LenheartTalisman_" + C_Slot3.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot3.Item.ItemId]; Func(obj); } if (C_Slot4.Item && getroottable().rawin("LenheartTalisman_" + C_Slot4.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot4.Item.ItemId]; Func(obj); } if (C_Slot5.Item && getroottable().rawin("LenheartTalisman_" + C_Slot5.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot5.Item.ItemId]; Func(obj); } if (C_Slot6.Item && getroottable().rawin("LenheartTalisman_" + C_Slot6.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot6.Item.ItemId]; Func(obj); } if (C_Slot7.Item && getroottable().rawin("LenheartTalisman_" + C_Slot7.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot7.Item.ItemId]; Func(obj); } if (C_Slot8.Item && getroottable().rawin("LenheartTalisman_" + C_Slot8.Item.ItemId)) { local Func = getroottable()["LenheartTalisman_" + C_Slot8.Item.ItemId]; Func(obj); } } //开启界面回调 function OpenClassCallBack() { L_NewWindows("Lenheart", 170, 0x65535); local W = sq_GetPopupWindowMainCotrol(170); W.SetVisible(false); W.SetEnable(false); //初始请求背包信息 F_GetMyPtstInfo(24, 1); } //绘制入口 function Draw(obj) { if (MainState) { if (WindowObj) { DrawMain(obj); WindowObj.Show(obj); X = WindowObj.X; Y = WindowObj.Y; } else { WindowObj = PtstWindow(X, Y, 258, 408, 28); //坐标 大小 标题栏高度 //WindowObj.DeBugMode = true; } } else { if (WindowObj && WindowObj.YMouseSw == false) { IMouse.ReleaseMouseClick(); WindowObj.YMouseSw = true; WindowObj = null; } } } //逻辑入口 function Proc(obj) { if (KeyPressNB.isKeyPress(48, "PtstCloseKey")) { MainState = false; } //初始化槽和道具对象 if (SlotB == null) { SlotB = []; SlotB.resize(24); } for (local i = 0; i < 24; i++) { if (SlotB[i] == null) SlotB[i] = PtstSlot(5); } { if (C_Slot0 == null) C_Slot0 = PtstSlot(5); if (C_Slot1 == null) C_Slot1 = PtstSlot(5); if (C_Slot2 == null) C_Slot2 = PtstSlot(5); if (C_Slot3 == null) C_Slot3 = PtstSlot(5); if (C_Slot4 == null) C_Slot4 = PtstSlot(5); if (C_Slot5 == null) C_Slot5 = PtstSlot(5); if (C_Slot6 == null) C_Slot6 = PtstSlot(5); if (C_Slot7 == null) C_Slot7 = PtstSlot(5); if (C_Slot8 == null) C_Slot8 = PtstSlot(5); if (A_Slot0 == null) A_Slot0 = PtstSlot(5); if (A_Slot1 == null) A_Slot1 = PtstSlot(5); if (A_Slot2 == null) A_Slot2 = PtstSlot(5); } if (sq_GetCurrentModuleType() == 3) { if (!BuffSet) { SetSkillData(obj); BuffSet = true; } } else { if (BuffSet) BuffSet = false; } } } function Ptst(obj) { local RootTab = getroottable(); if (!RootTab.rawin("PtstObj")) { local Cobj = PtstC(); RootTab.rawset("PtstObj", Cobj); EventIcon("护石系统", 120, 120, Cobj); } else { RootTab["PtstObj"].Proc(obj); RootTab["PtstObj"].Draw(obj); } }