/* 文件名:Medal.nut 路径:Plugins/Medal/Medal.nut 创建日期:2022-12-18 05:53 文件用途:勋章系统文件 */ //TabTextButtonPro按钮类 class TabTextButtonPro 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; //可点击高度 //构造函数 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; } //绘制按钮 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() && IMouse.GetLButton() == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && IMouse.GetLButton() == 0) return true; else return false; } //左键双击状态 function IsLBDoubleClick() { if (isInRect() && IMouse.GetLButton() == 64) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && IMouse.isButtonUpEvent()) return true; else return false; } } //HudPro按钮类 class MedalButtonPro 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; //可点击高度 //构造函数 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; } //绘制按钮 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() && IMouse.GetLButton() == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && IMouse.GetLButton() == 0) return true; else return false; } //左键双击状态 function IsLBDoubleClick() { if (isInRect() && IMouse.GetLButton() == 64) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && IMouse.isButtonUpEvent()) return true; else return false; } } class MedalItem extends BasicsDrawTool { X = null; Y = null; ItemId = null; Attribute = null; MCount = 0; Rarity = null; TabName = ["名称: ", "强化等级: ", "力量 +", "体力 +", "智力 +", "精神 +", "独立攻击力 +", "物理攻击力 +", "魔法攻击力 +", "物理防御 +", "魔法防御 +", "移动速度 +", "攻击速度 +", "释放速度 +", "物理暴击 +", "魔法暴击 +", "命中率 +", "光属性强化 +", "暗属性强化 +", "水属性强化 +", "火属性强化 +", "全属性强化 +" ] constructor(Id, attribute, rarity) { ItemId = Id; Attribute = attribute; Rarity = rarity; } //绘制悬停 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++; } line = line + X1 + X2 + X3 + X4 + X5 + 1 - MCount; //总共需要的长度 } //界面是否靠近边界偏移计算 { 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 -= 25; dy -= 25; } //主界面绘制 { //绘制顶 T_DrawStayAni(obj, "common/medal/main.ani", dx, dy, 25, "MedalItemInfoMainTop"); //绘制线 T_DrawStayAni(obj, "common/medal/main.ani", dx, dy + 19, 26, "MedalItemInfoMainXian"); //绘制中 for (local i = 0; i < line; i++) { T_DrawStayAni(obj, "common/medal/main.ani", dx, dy + 19 + 14 + (i * 14), 27, "MedalItemInfoMainZhong"); } //绘制底 T_DrawStayAni(obj, "common/medal/main.ani", dx, dy + 19 + 14 + (line * 14), 28, "MedalItemInfoMainDi"); 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()["MedalObj"].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); //绘制强化等级 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/medal/main.ani", dx, cy + ((o - 1) * 15) + (XianCount * 14), 29, "MedalItemInfoMainXianT"); 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/medal/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "MedalItemInfoMainXianT"); 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/medal/main.ani", dx, cy + (XianCount * 14) + ((o - 1) * 15), 29, "MedalItemInfoMainXianT"); 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 MedalSlot extends BasicsDrawTool { Type = null; X = null; Y = null; Item = null; ItemM = null; Select = false; SlotName = null; Tobj = null; constructor(type) { Type = type; local RootTab = getroottable(); Tobj = RootTab["MedalObj"]; } 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() && IMouse.GetLButton() == 1) { obj.getVar(SlotName + "L").setBool(1, true); return true; } else return false; } //左键弹起状态 function isLBUp(obj) { if (IMouse.GetLButton() == 0) { obj.getVar(SlotName + "L").setBool(1, false); return true; } else return false; } //右键按下状态 function isRBDown(obj) { if (IsHover() && IMouse.GetRButton() == 2) { obj.getVar(SlotName + "R").setBool(1, true); return true; } else return false; } //右键单击状态 function isRBActive(obj) { if (IsHover() && IMouse.isButtonUpEvent() && obj.getVar(SlotName + "R").getBool(1) == true) { obj.getVar(SlotName + "R").setBool(1, false); return true; } else return false; } function DrawHover(obj) { //绘制悬停槽蓝光 T_DrawStayAni(obj, "common/medal/main.ani", X, Y, Type, "MedalSlotHover" + 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 (Item && Tobj.MoveModel != SlotName) Item.Run(X, Y); //如果有守护珠对象则执行 if (ItemM && Tobj.MoveModel != SlotName) ItemM.Run(X, Y); if (Type == 23) { if (Item) { T_DrawStayAni(obj, "common/medal/main.ani", Tobj.X + 69 + (((slot - 88) % 2) * 78), Tobj.Y + 96 + (((slot - 88) / 2) * 90), 21, "MedalSystemMainSlot3"); } else { T_DrawStayAni(obj, "common/medal/main.ani", Tobj.X + 69 + (((slot - 88) % 2) * 78), Tobj.Y + 96 + (((slot - 88) / 2) * 90), 20, "MedalSystemMainSlot2"); } } //如果悬停 if (IsHover()) { //绘制背景蓝光 移动时绘制蓝光要在图标底下 if (Tobj.MoveModel != SlotName) DrawHover(obj); isRBDown(obj); //如果右键穿戴 if (Item && isRBActive(obj)) { local UseMedalPack = Json_STL("UseMedalPack"); UseMedalPack.Put("op", 20009003); UseMedalPack.Put("sel_type", Tobj.State); UseMedalPack.Put("old_slot", slot); if (Tobj.State == 24) { if (slot != 88) UseMedalPack.Put("new_slot", 88); if (slot == 88) UseMedalPack.Put("new_slot", 999999); } else UseMedalPack.Put("new_slot", 888888); UseMedalPack.Put("page", Tobj.NowPage); UseMedalPack.Put("type", Tobj.State); local str = UseMedalPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); UseMedalPack.Delete(); } } //如果左键按下 写入可移动状态 if (Item && isLBDown(obj) && Tobj.MoveModel == null && slot < 88) { Tobj.MoveModel = SlotName; } //如果左键弹起 写入静止状态 if (isLBUp(obj) && Tobj.MoveModel != null) { local MoveMedalPack = Json_STL("MoveMedalPack"); MoveMedalPack.Put("op", 20009003); MoveMedalPack.Put("sel_type", Tobj.State); MoveMedalPack.Put("old_slot", Tobj.MoveModel.tointeger()); MoveMedalPack.Put("new_slot", Tobj.HoverModel.tointeger()); MoveMedalPack.Put("page", Tobj.NowPage); local str = MoveMedalPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); MoveMedalPack.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 MedalSystem extends BasicsDrawTool { //界面坐标 X = null; Y = null; State = 24; CheckGetMyMedalInfo = false; MedalButton = null; MedalButtonSwitch = true; BeadButton = null; BeadButtonSwitch = false; //最大页数 Json获取 MaxPage = 5; //当前页数 Json获取 NowPage = 1; //颜色 ColorArr = null; WearSlotM = null; WearSlotB = null; SlotArr = null; MoveModel = null; HoverModel = null; //副本附加状态 DgnAddBuff = false; constructor(obj) { //注册配置类信息回调 Pack_Control.rawset(20009998, SetBaseInfoCallBack); //请求配置信息 GetBaseInfo(); //注册获取背包信息回调 Pack_Control.rawset(20009002, GetMyMedalInfoCallBack); //注册穿戴勋章回调 Pack_Control.rawset(20009012, GetMyWearMedalCallBack); //初始请求背包信息 F_GetMyMedalInfo(24, 1); } //请求配置信息 function GetBaseInfo() { local GetBaseInfoPack = Json_STL("GetBaseInfoPack"); GetBaseInfoPack.Put("op", 20009997); local str = GetBaseInfoPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetBaseInfoPack.Delete(); } //配置类信息回调 function SetBaseInfoCallBack(Chunk) { print(Chunk); local Buffer = Json_STL("GetMyMedalInfoBuffer"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("MedalObj")) { local Tobj = RootTab["MedalObj"]; 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 GetMyWearMedalCallBack(Chunk) { //收到打开包 local Buffer = Json_STL("GetMyMedalInfoBuffer"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("MedalObj")) { local Tobj = RootTab["MedalObj"]; //清空勋章对象 Tobj.WearSlotM.Item = null; //清空守护珠对象组 for (local w = 0; w < 4; w++) { Tobj.WearSlotB[w].Item = null; } local dataarr = []; local dataarrsize = Buffer.Get("data->" + 0 + "->dataarrsize"); if (dataarrsize) { for (local z = 0; z < dataarrsize; z++) { local arrbuufer = []; local a = Buffer.Get("data->" + 0 + "->stk_ab->" + z + "->0"); local b = Buffer.Get("data->" + 0 + "->stk_ab->" + z + "->1"); //这里是守护珠 if (a >= 22 && a <= 25) { //如果有守护珠 实例化守护珠对象组 //if(Tobj.WearSlotB.Item == null)Tobj.WearSlotB.Item = []; local str = b; b = Json_STL("GetMyMedalInfoBufferB"); b.Parse(str, 0, false); local bSlotPos = b.Get("slot"); local bdataarrsize = b.Get("dataarrsize"); local bdataarr = []; for (local j = 0; j < bdataarrsize; j++) { local barrbuufer = []; local c = b.Get("stk_ab->" + j + "->0"); local d = b.Get("stk_ab->" + j + "->1"); barrbuufer.append(c); barrbuufer.append(d); bdataarr.append(barrbuufer); } local brarity = b.Get("rarity"); Tobj.WearSlotB[bSlotPos].Item = MedalItem(b.Get("stk_id"), bdataarr, brarity); } arrbuufer.append(a); arrbuufer.append(b); dataarr.append(arrbuufer); } local rarity = Buffer.Get("data->" + 0 + "->rarity"); Tobj.WearSlotM.Item = MedalItem(Buffer.Get("data->" + 0 + "->stk_id"), dataarr, rarity); } } } //获取背包信息回调 function GetMyMedalInfoCallBack(Chunk) { //收到打开包 local Buffer = Json_STL("GetMyMedalInfoBuffer"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("MedalObj")) { local Tobj = RootTab["MedalObj"]; { //同步页面(勋章或守护珠) local SelType = Buffer.Get("sel_type"); Tobj.State = SelType; if (SelType == 24) { Tobj.MedalButtonSwitch = true; Tobj.BeadButtonSwitch = false; } else if (SelType == 23) { Tobj.MedalButtonSwitch = false; Tobj.BeadButtonSwitch = true; } } //Tobj.SlotArr = []; local Count = Buffer.Get("count"); for (local z = 0; z < 24; z++) { Tobj.SlotArr[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"); Tobj.SlotArr[SlotPos].Item = MedalItem(Buffer.Get("data->" + i + "->stk_id"), dataarr, rarity); } } } //判断打开背包 function CheckOpenInv() { if (sq_GetPopupWindowMainCotrol(74) && CheckGetMyMedalInfo == false) { GetMyMedalInfo(State, NowPage); CheckGetMyMedalInfo = true; } else if (!sq_GetPopupWindowMainCotrol(74)) { CheckGetMyMedalInfo = false; } } //获取背包信息 function GetMyMedalInfo(Type, Page) { local GetMyMedalInfoPack = Json_STL("GetMyMedalInfoPack"); GetMyMedalInfoPack.Put("op", 20009001); GetMyMedalInfoPack.Put("sel_type", Type); GetMyMedalInfoPack.Put("page", Page); GetMyMedalInfoPack.Put("wear", false); local str = GetMyMedalInfoPack.GetString(); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetMyMedalInfoPack.Delete(); } //首次获取背包信息 function F_GetMyMedalInfo(Type, Page) { local GetMyMedalInfoPack = Json_STL("GetMyMedalInfoPack"); GetMyMedalInfoPack.Put("op", 20009001); 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 DrawMain(obj) { { //底图层绘制 //窗口 T_DrawStayAni(obj, "common/medal/main.ani", X + 2, Y + 18, 0, "MedalSystemMain"); //勋章槽贴图 T_DrawStayAni(obj, "common/medal/main.ani", X + 105, Y + 138, 18, "MedalSystemMainSlot1"); //守护珠槽贴图 TODO 安装守护珠以后槽会缩小 贴图21 for (local u = 0; u < 4; u++) { T_DrawStayAni(obj, "common/medal/main.ani", X + 68 + 7 + ((u % 2) * 78), Y + 95 + 7 + ((u / 2) * 90), 22, "MedalSystemMainSlot21"); } } { //勋章和守护珠切换按钮 MedalButton = TabTextButtonPro(obj, "小勋章Tab", X + 5, Y + 253, "common/medal/main.ani", 4, 38, 21, "勋章", 8, 5); MedalButton.SwitchState = MedalButtonSwitch; MedalButton.SetRectEnble(true, "a勋章Tab", X + 5, Y + 253, "common/medal/main.ani", 5); MedalButton.SetCustomClickEnble(true, "a勋章Tab", X + 5, Y + 253, "common/medal/main.ani", 6); //勋章 MedalButton.Show(); if (MedalButton.isLBActive()) { //MedalButton.SwitchState = true; MedalButtonSwitch = true; //BeadButton.SwitchState = false; BeadButtonSwitch = false; State = 24; //清空槽对象 SlotArr = []; SlotArr = null; //还原页码 NowPage = 1; GetMyMedalInfo(State, NowPage); } BeadButton = TabTextButtonPro(obj, "小珠子Tab", X + 5 + 39, Y + 253, "common/medal/main.ani", 7, 38, 21, "守护珠", 8, 5); BeadButton.SwitchState = BeadButtonSwitch; BeadButton.SetRectEnble(true, "a勋章Tab", X + 5 + 39, Y + 253, "common/medal/main.ani", 8); BeadButton.SetCustomClickEnble(true, "a勋章Tab", X + 5 + 39, Y + 253, "common/medal/main.ani", 9); //守护珠 BeadButton.Show(); if (BeadButton.isLBActive()) { MedalButton.SwitchState = false; MedalButtonSwitch = false; BeadButton.SwitchState = true; BeadButtonSwitch = true; State = 23; //清空槽对象 SlotArr = []; SlotArr = null; //还原页码 NowPage = 1; GetMyMedalInfo(State, NowPage); } } { //翻页 local LeftButton = MedalButtonPro(obj, "MedalLeftButton", X + 150 + 39, Y + 260, "common/medal/main.ani", 13, 9, 14); LeftButton.SetRectEnble(true, "MedalLeftButtonr", X + 150 + 39, Y + 260, "common/medal/main.ani", 16); LeftButton.SetCustomClickEnble(true, "MedalLeftButtonc", X + 150 + 39, Y + 260, "common/medal/main.ani", 15); LeftButton.Show(); if (LeftButton.isLBActive()) { //页码减少 if (NowPage > 1) NowPage--; //清空槽对象 SlotArr = []; SlotArr = null; GetMyMedalInfo(State, NowPage); } local RightButton = MedalButtonPro(obj, "MedalRightButton", X + 200 + 39, Y + 260, "common/medal/main.ani", 13, 9, 10); RightButton.SetRectEnble(true, "MedalRightButtonr", X + 200 + 39, Y + 260, "common/medal/main.ani", 11); RightButton.SetCustomClickEnble(true, "MedalRightButtonc", X + 200 + 39, Y + 260, "common/medal/main.ani", 12); RightButton.Show(); if (RightButton.isLBActive()) { //页码增加 if (NowPage < MaxPage) NowPage++; //清空槽对象 SlotArr = []; SlotArr = null; GetMyMedalInfo(State, NowPage); } L_sq_DrawCode(NowPage + "/" + MaxPage, X + 175 + 39, Y + 258, sq_RGBA(230, 200, 155, 250), 1, 1); } { //佩戴槽 { //勋章 if (WearSlotM == null) WearSlotM = MedalSlot(24); } { //守护珠 if (WearSlotB == null) { WearSlotB = []; WearSlotB.resize(4); for (local i = 0; i < 4; i++) { WearSlotB[i] = MedalSlot(23); } } } } { //背包槽 if (SlotArr == null) { SlotArr = []; SlotArr.resize(24); for (local i = 0; i < 24; i++) { SlotArr[i] = MedalSlot(24); } } } //绘制 { //第一图层 WearSlotM.Show(obj, X + 114, Y + 147, 88); for (local i = 0; i < 4; i++) { WearSlotB[i].Show(obj, X + 76 + ((i % 2) * 78), Y + 103 + ((i / 2) * 90), i + 88); } for (local k = 0; k < 24; k++) { SlotArr[k].Show(obj, X + 9 + ((k % 8) * 30), Y + 275 + ((k / 8) * 30), k); } for (local p = 0; p < 24; p++) { SlotArr[p].Show(obj, X + 9 + ((p % 8) * 30), Y + 275 + ((p / 8) * 30), p); } //第二图层 WearSlotM.ItemShow(obj); for (local u = 0; u < 4; u++) { WearSlotB[u].ItemShow(obj); } for (local z = 0; z < 24; z++) { SlotArr[z].ItemShow(obj); } WearSlotM.ItemMoveShow(obj); for (local g = 0; g < 4; g++) { WearSlotB[g].ItemMoveShow(obj); } for (local z = 0; z < 24; z++) { SlotArr[z].ItemMoveShow(obj); } } // print("Fist: " + MoveModel); // print("Next: " + HoverModel); } //实例化槽对象 function NewSlotObject() { //勋章佩戴槽 if (WearSlotM == null) WearSlotM = MedalSlot(24); //守护珠佩戴槽 if (WearSlotB == null) { WearSlotB = []; WearSlotB.resize(4); for (local i = 0; i < 4; i++) { WearSlotB[i] = MedalSlot(23); } } //背包槽 if (SlotArr == null) { SlotArr = []; SlotArr.resize(24); for (local i = 0; i < 24; i++) { SlotArr[i] = MedalSlot(24); } } } //界面开启后的回调 function Run(obj, x, y) { X = x; Y = y; //绘制界面 DrawMain(obj); } //常驻回调 function Proc() { //检测打开背包 CheckOpenInv(); //实例化槽对象 NewSlotObject(); } //设置表 function CalculationAttribute(TabBuffer, Str, Rate) { if (TabBuffer.rawin(Str)) TabBuffer.rawset(Str, TabBuffer[Str] + Rate); else TabBuffer.rawset(Str, Rate) } //读取属性 function ReadCalAttribute(M_Tab, S_Tab) { for (local i = 0; i < S_Tab.Item.Attribute.len(); i++) { local Type = S_Tab.Item.Attribute[i][0]; if (Type == 2) CalculationAttribute(M_Tab, "力量", S_Tab.Item.Attribute[i][1]); else if (Type == 3) CalculationAttribute(M_Tab, "体力", S_Tab.Item.Attribute[i][1]); else if (Type == 4) CalculationAttribute(M_Tab, "智力", S_Tab.Item.Attribute[i][1]); else if (Type == 5) CalculationAttribute(M_Tab, "精神", S_Tab.Item.Attribute[i][1]); else if (Type == 6) CalculationAttribute(M_Tab, "独立攻击力", S_Tab.Item.Attribute[i][1]); else if (Type == 7) CalculationAttribute(M_Tab, "物理攻击力", S_Tab.Item.Attribute[i][1]); else if (Type == 8) CalculationAttribute(M_Tab, "魔法攻击力", S_Tab.Item.Attribute[i][1]); else if (Type == 9) CalculationAttribute(M_Tab, "物理防御", S_Tab.Item.Attribute[i][1]); else if (Type == 10) CalculationAttribute(M_Tab, "魔法防御", S_Tab.Item.Attribute[i][1]); else if (Type == 11) CalculationAttribute(M_Tab, "移动速度", S_Tab.Item.Attribute[i][1]); else if (Type == 12) CalculationAttribute(M_Tab, "攻击速度", S_Tab.Item.Attribute[i][1]); else if (Type == 13) CalculationAttribute(M_Tab, "释放速度", S_Tab.Item.Attribute[i][1]); else if (Type == 14) CalculationAttribute(M_Tab, "物理暴击", S_Tab.Item.Attribute[i][1]); else if (Type == 15) CalculationAttribute(M_Tab, "魔法暴击", S_Tab.Item.Attribute[i][1]); else if (Type == 16) CalculationAttribute(M_Tab, "命中率", S_Tab.Item.Attribute[i][1]); else if (Type == 17) CalculationAttribute(M_Tab, "光属性强化", S_Tab.Item.Attribute[i][1]); else if (Type == 18) CalculationAttribute(M_Tab, "暗属性强化", S_Tab.Item.Attribute[i][1]); else if (Type == 19) CalculationAttribute(M_Tab, "冰属性强化", S_Tab.Item.Attribute[i][1]); else if (Type == 20) CalculationAttribute(M_Tab, "火属性强化", S_Tab.Item.Attribute[i][1]); else if (Type == 21) CalculationAttribute(M_Tab, "全属性强化", S_Tab.Item.Attribute[i][1]); } } //副本系统 function DgnSystem(obj) { // local str = Json_STL.Encode(AddAttributeArr); // Sout("查询当前身穿的属性:\n %L", str); if (sq_GetCurrentModuleType() == 3) { //如果没带勋章就直接走 if (WearSlotM.Item == null) return; local AddAttributeArr = {}; ReadCalAttribute(AddAttributeArr, WearSlotM); for (local i = 0; i < 4; i++) { if (WearSlotB[i].Item != null) ReadCalAttribute(AddAttributeArr, WearSlotB[i]); } if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/m/m.nut")) { DgnAddBuff = true; local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/m/m.nut", true); CNSquirrelAppendage.sq_Append(appendage, obj, obj); local change_appendage = appendage.sq_getChangeStatus("Yosin_MedalDgnBuff"); if (!change_appendage) { change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0, CHANGE_STATUS_TYPE_COOLTIME_DECLINE, false, 0, 114514); } if (change_appendage) { change_appendage.clearParameter(); //print(WearSlotM.Item.TabName[0]); foreach(Key, Value in AddAttributeArr) { if (Key == "力量") change_appendage.addParameter(0, false, Value.tofloat()); else if (Key == "体力") change_appendage.addParameter(3, false, Value.tofloat()); else if (Key == "精神") change_appendage.addParameter(2, false, Value.tofloat()); else if (Key == "智力") change_appendage.addParameter(1, false, Value.tofloat()); else if (Key == "独立攻击力") change_appendage.addParameter(53, false, Value.tofloat()); else if (Key == "物理攻击力") change_appendage.addParameter(4, false, Value.tofloat()); else if (Key == "魔法攻击力") change_appendage.addParameter(31, false, Value.tofloat()); else if (Key == "物理防御") change_appendage.addParameter(5, false, Value.tofloat()); else if (Key == "魔法防御") change_appendage.addParameter(32, false, Value.tofloat()); else if (Key == "移动速度") change_appendage.addParameter(11, false, Value.tofloat()); else if (Key == "攻击速度") change_appendage.addParameter(10, false, Value.tofloat()); else if (Key == "释放速度") change_appendage.addParameter(12, false, Value.tofloat()); else if (Key == "物理暴击") change_appendage.addParameter(15, false, Value.tofloat() / 10.0); else if (Key == "魔法暴击") change_appendage.addParameter(16, false, Value.tofloat() / 10.0); else if (Key == "命中率") change_appendage.addParameter(33, false, 0 - (Value.tofloat() / 10.0)); else if (Key == "光属性强化") change_appendage.addParameter(45, false, Value.tofloat()); else if (Key == "暗属性强化") change_appendage.addParameter(44, false, Value.tofloat()); else if (Key == "冰属性强化") change_appendage.addParameter(43, false, Value.tofloat()); else if (Key == "火属性强化") change_appendage.addParameter(42, false, Value.tofloat()); else if (Key == "全属性强化") change_appendage.addParameter(46, false, Value.tofloat()); } } //Sout("已附加属性"); } } else { DgnAddBuff = false; } } } function Medal(obj) { local RootTab = getroottable(); if (!RootTab.rawin("MedalObj")) { local Cobj = MedalSystem(obj); RootTab.rawset("MedalObj", Cobj); } else { RootTab["MedalObj"].Proc(); RootTab["MedalObj"].DgnSystem(obj); } } function Sq_L_Medal(x, y) { local RootTab = getroottable(); if (RootTab.rawin("MedalObj")) { local obj = sq_GetMyMasterCharacter(); RootTab["MedalObj"].Run(obj, x - 900, y); } }