1430 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			1430 lines
		
	
	
		
			49 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名: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);
 | |
|     }
 | |
| } |