798 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			798 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:DamageFont.nut
 | |
| 路径:Plugins/DamageFont/DamageFont.nut
 | |
| 创建日期:2023-06-25	18:00
 | |
| 文件用途:伤害字体
 | |
| */
 | |
| 
 | |
| //HudPro按钮类
 | |
| class DamageFontIMGPro 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 T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName) {
 | |
|         L_sq_DrawImg(CustomClickAnifile, CustomClickFrame, CustomClickx, CustomClicky);
 | |
|     }
 | |
| 
 | |
|     //绘制按钮
 | |
|     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;
 | |
|     }
 | |
| }
 | |
| 
 | |
| class DamageFontWindow 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 DamageFontObjectC extends BasicsDrawTool {
 | |
|     X = 0;
 | |
|     Y = 0;
 | |
|     IDX = null;
 | |
|     UIdx = null;
 | |
|     Name = null;
 | |
|     ImgPath = null;
 | |
|     MaxNumArr = null;
 | |
|     Mobj = null; //鼠标对象
 | |
|     ID = null;
 | |
| 
 | |
|     constructor(gIdx, gName, gImgPath, gMaxNumArr, gUIdx, gId) {
 | |
|         this.IDX = gIdx;
 | |
|         this.Name = gName;
 | |
|         this.ImgPath = gImgPath;
 | |
|         this.MaxNumArr = gMaxNumArr;
 | |
|         this.UIdx = gUIdx;
 | |
|         this.ID = gId;
 | |
|         if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"];
 | |
|     }
 | |
| 
 | |
|     //绘制
 | |
|     function Show(obj, x, y) {
 | |
|         X = x;
 | |
|         Y = y;
 | |
| 
 | |
|         //绘制底
 | |
|         L_sq_DrawImg("interface2/skinstorage/slots.img", 0, x, y);
 | |
|         //绘制伤害字体999
 | |
|         // local Idx = 70;
 | |
|         // if (MaxNumArr.len() >= 3) Idx = 72;
 | |
|         // L_sq_DrawImg(ImgPath, Idx, x + 3, y + 26);
 | |
|         L_Sq_DrawItem(X + 22, Y + 23, ID, 1, 0, 0, 0);
 | |
|         //绘制盖子
 | |
|         L_sq_DrawImg("interface2/skinstorage/slots.img", 2, x, y);
 | |
|         //
 | |
|         L_sq_DrawCode(Name, X + 84, Y + 23, sq_RGBA(178, 155, 113, 250), 0, 1);
 | |
|         L_sq_DrawCode("Yosin皮肤字体", X + 84, Y + 40, sq_RGBA(255, 177, 0, 250), 0, 1);
 | |
|         L_sq_DrawCode("无限制使用", X + 84, Y + 55, sq_RGBA(255, 85, 0, 250), 0, 1);
 | |
| 
 | |
| 
 | |
|         //绘制选中效果
 | |
|         if (getroottable()["DamageFontCObj"].FocusPrintIdx == IDX) L_sq_DrawImg("interface2/skinstorage/slots.img", 4, x, y);
 | |
|         //绘制应用中
 | |
|         if (getroottable()["DamageFontCObj"].NowDamageSkinIndex == IDX) L_sq_DrawImg("interface2/skinstorage/slots.img", 23, x + 290, y + 3);
 | |
| 
 | |
| 
 | |
|         //绘制应用按钮
 | |
|         local Button = DamageFontIMGPro(obj, "应用", x + 284, y + 26, "interface2/yosin/windowscommon.img", 56, 24, 12);
 | |
|         Button.SetRectEnble(true, "应用", x + 284, y + 26, "interface2/yosin/windowscommon.img", 13);
 | |
|         Button.SetCustomClickEnble(true, "应用", x + 284, y + 26, "interface2/yosin/windowscommon.img", 14);
 | |
|         Button.Show();
 | |
|         if (Button.isInRect()) L_sq_DrawCode("应用", Button.x + 16, Button.y + 5, sq_RGBA(231, 198, 132, 250), 0, 1);
 | |
|         else L_sq_DrawCode("应用", Button.x + 16, Button.y + 5, sq_RGBA(189, 148, 99, 250), 0, 1);
 | |
|         if (Button.isLBActive()) {
 | |
|             local T = {
 | |
|                 op = 20024003,
 | |
|                 UseIdx = UIdx,
 | |
|             }
 | |
|             SendPack(T);
 | |
|             getroottable()["DamageFontCObj"].NowDamageSkinIndex = IDX;
 | |
|             getroottable()["DamageFontCObj"].InitDamageFont(IDX);
 | |
|         }
 | |
| 
 | |
|         if (isLBActive()) {
 | |
|             getroottable()["DamageFontCObj"].FocusPrintIdx = IDX;
 | |
|             getroottable()["DamageFontCObj"].InitDamageFont(IDX);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //悬停状态
 | |
|     function isInRect() {
 | |
|         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X, Y, 354, 74)) 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;
 | |
|     }
 | |
| }
 | |
| 
 | |
| class DamageFontC extends BasicsDrawTool {
 | |
|     WindowObj = null; //窗口对象
 | |
|     MainState = false; //主状态
 | |
|     X = 6;
 | |
|     Y = 6;
 | |
| 
 | |
|     //当前字体皮肤编号
 | |
|     NowDamageSkinIndex = null;
 | |
|     //字体皮肤数据
 | |
|     DamageSkinList = null;
 | |
|     //数字伤害类型
 | |
|     RealType = null;
 | |
|     //滚动列表对象
 | |
|     Sobj = null;
 | |
| 
 | |
|     //最大伤害数字
 | |
|     MaxDamageNumber = 999999;
 | |
| 
 | |
|     //显示对象
 | |
|     FocusPrintIdx = 0;
 | |
|     //Nut白字倍率
 | |
|     NutWRate = 0;
 | |
| 
 | |
|     //获取字体列表信息
 | |
|     function GetFontList() {
 | |
|         local T = {
 | |
|             op = 20024001,
 | |
|         }
 | |
|         SendPack(T);
 | |
|     }
 | |
| 
 | |
|     //获取字体列表信息回调
 | |
|     function GetFontListCallBack(Chunk) {
 | |
|         // Sout("收到包 %L", Chunk);
 | |
|         local Buffer = Json_STL("CheckDamageFontCObjGetBaseInfoCallBackBuffer");
 | |
|         Buffer.Parse(Chunk, 0, false);
 | |
|         local RootTab = getroottable();
 | |
|         if (RootTab.rawin("DamageFontCObj")) {
 | |
|             local Tobj = RootTab["DamageFontCObj"];
 | |
|             Tobj.DamageSkinList = null;
 | |
|             Tobj.DamageSkinList = [];
 | |
| 
 | |
|             Tobj.MaxDamageNumber = Buffer.Get("MaxDamageNumber");
 | |
|             // Tobj.MaxDamageNumber = 9999;
 | |
|             Tobj.NowDamageSkinIndex = Buffer.Get("UseIdx");
 | |
|             Tobj.FocusPrintIdx = Buffer.Get("UseIdx");
 | |
| 
 | |
|             for (local i = 0; i< 100; i++) {
 | |
|                 local gIdx = Buffer.Get("FontArray->" + i + "->gIdx");
 | |
|                 if (gIdx == false) break;
 | |
|                 local cIdx = Buffer.Get("FontArray->" + i + "->cIdx");
 | |
|                 local gName = Buffer.Get("FontArray->" + i + "->gName");
 | |
|                 local gItem = Buffer.Get("FontArray->" + i + "->itemId");
 | |
| 
 | |
|                 local gImgPath = Buffer.Get("FontArray->" + i + "->gImgPath");
 | |
| 
 | |
| 
 | |
|                 local gMaxNumArr = [];
 | |
|                 for (local z = 0; z< 100; z++) {
 | |
|                     local buf = Buffer.Get("FontArray->" + i + "->gMaxNumArr->" + z);
 | |
|                     if (!buf) break;
 | |
|                     gMaxNumArr.append(buf);
 | |
|                 }
 | |
|                 local gKeyMaxNumArr = [];
 | |
|                 for (local y = 0; y< 100; y++) {
 | |
|                     local buf = Buffer.Get("FontArray->" + i + "->gKeyMaxNumArr->" + y);
 | |
|                     if (!buf) break;
 | |
|                     gKeyMaxNumArr.append(buf);
 | |
|                 }
 | |
|                 local T = {
 | |
|                     Idx = cIdx, //伤害字体排列编号
 | |
|                     UIdx = gIdx, //伤害字体编号
 | |
|                     Name = gName, //伤害字体名称
 | |
|                     ImgPath = gImgPath, //Img路径
 | |
|                     MaxNumArr = gMaxNumArr, //普通999帧数数组
 | |
|                     KeyMaxNumArr = gKeyMaxNumArr, //暴击999帧数数组
 | |
|                     Item = gItem, //道具ID
 | |
|                 }
 | |
|                 Tobj.DamageSkinList.append(T);
 | |
|             }
 | |
|             Tobj.InitDamageFont(Tobj.NowDamageSkinIndex);
 | |
|             Tobj.Sobj = ScrollControl(Tobj.DamageSkinList, 5, 1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //初始化伤害字体
 | |
|     function InitDamageFont(Idx) {
 | |
|         if (Idx == null) {
 | |
|             for (local i = 0; i< 7; i++) {
 | |
|                 L_sq_IntiNumberDraw("common/etc/damagefontskin/damagefont00.img", 0 + (i * 10), i);
 | |
|             }
 | |
|         } else {
 | |
|             for (local i = 0; i< 7; i++) {
 | |
|                 L_sq_IntiNumberDraw(DamageSkinList[Idx].ImgPath, 0 + (i * 10), i);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //初始化数字伤害类型
 | |
|     function InitRealType() {
 | |
|         RealType = [0, 5, 1, 5, 2, 5, 1, 2, 3, 5, 4, 5, 3, 5, 4, 5, 0, 5, 4, 5, 2, 5, 4];
 | |
|         // //白字
 | |
|         // RealType.rwaset(0, 0);
 | |
|         // //橙字
 | |
|         // RealType.rwaset(1, 1);
 | |
|         // //回血 绿字
 | |
|         // RealType.rwaset(7, 2);
 | |
|         // //回蓝 蓝字
 | |
|         // RealType.rwaset(8, 3);
 | |
|         // //流血
 | |
|         // RealType.rwaset(34, 4);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     constructor() {
 | |
|         Pack_Control.rawset(20024002, GetFontListCallBack);
 | |
| 
 | |
|         //初始化伤害类型
 | |
|         InitRealType();
 | |
| 
 | |
|         DamageFontArray = {};
 | |
|         DamageSkinList = [];
 | |
| 
 | |
|         local T = {
 | |
|             Idx = 0, //伤害字体排列编号
 | |
|             UIdx = 0, //伤害字体编号
 | |
|             Name = "默认伤害字体", //伤害字体名称
 | |
|             ImgPath = "common/etc/damagefontskin/damagefont00.img", //Img路径
 | |
|             MaxNumArr = [73, 72], //普通999帧数数组
 | |
|             KeyMaxNumArr = [71, 70], //暴击999帧数数组
 | |
|             Item = 19880400, //道具ID
 | |
|         }
 | |
|         DamageSkinList.append(T);
 | |
| 
 | |
|         //初始化伤害字体
 | |
|         InitDamageFont(NowDamageSkinIndex);
 | |
| 
 | |
|         //获取字体列表信息
 | |
|         GetFontList();
 | |
|     }
 | |
| 
 | |
|     //绘制主界面
 | |
|     function DrawMain(obj) {
 | |
|         //绘制窗口
 | |
|         L_sq_DrawImg("interface2/skinstorage/skinstorage.img", 0, X, Y);
 | |
|         //绘制字体排列窗口
 | |
|         L_sq_DrawImg("interface2/skinstorage/skinstorage.img", 5, X + 421 - 9, Y + 108 - 67);
 | |
| 
 | |
|         //总览
 | |
|         L_sq_DrawImg("interface2/skinstorage/tab/tab_summary.img", 3, X + 421 - 8, Y + 46 - 8);
 | |
|         //边框
 | |
|         L_sq_DrawImg("interface2/skinstorage/tab/tab_partyframe.img", 3, X + 487 - 8, Y + 46 - 8);
 | |
|         //伤害字体
 | |
|         L_sq_DrawImg("interface2/skinstorage/tab/tab_damagefonts.img", 2, X + 533 + 4, Y + 42 - 3);
 | |
|         //觉醒插图
 | |
|         L_sq_DrawImg("interface2/skinstorage/tab/tab_cutscene.img", 3, X + 609 - 7, Y + 52 - 14);
 | |
|         //表情
 | |
|         L_sq_DrawImg("interface2/skinstorage/tab/tab_instantemoticon.img", 3, X + 674 - 16, Y + 49 - 11);
 | |
|         //表情
 | |
|         L_sq_DrawImg("interface2/skinstorage/tab/tab_weaponlook.img", 3, X + 722 - 7, Y + 55 - 17);
 | |
| 
 | |
| 
 | |
| 
 | |
|         if (Sobj) {
 | |
|             foreach(Pos, v in Sobj.FocusList[0]) {
 | |
|                 local Dobj = DamageFontObjectC(v.Idx, v.Name, v.ImgPath, v.MaxNumArr, v.UIdx, v.Item);
 | |
|                 Dobj.Show(obj, X + 425, Y + 114 + (Pos * 85));
 | |
|             }
 | |
|             L_sq_DrawCode((Sobj.Controller.Value + 1).tostring(), X + 586, Y + 537, sq_RGBA(150, 255, 30, 250), 0, 1);
 | |
|             L_sq_DrawCode("   /  " + (Sobj.Controller.MaxValue + 1).tostring(), X + 586, Y + 537, sq_RGBA(150, 255, 30, 250), 0, 1);
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         local chr = sq_GetCNRDObjectToSQRCharacter(obj);
 | |
|         local charAni = chr.sq_GetStayAni();
 | |
|         sq_AnimationProc(charAni);
 | |
|         sq_drawCurrentFrame(charAni, X + 210, Y + 364, false);
 | |
| 
 | |
|         local MonsterAni = T_DrawDynamicAni_Fx(obj, "monster/goblin/animation_goblin2/down.ani", X + 360, Y + 364, "伤害字体哥布林倒地");
 | |
|         local NeArray = TryGetArry(1);
 | |
|         if (sq_GetCurrentTime(MonsterAni) >= 1000 && NeArray.len() == 0) {
 | |
|             local Timer = TimeSTL("演示字体" + FontIdx, 2000);
 | |
|             Timer.Reset();
 | |
|             Timer.Start();
 | |
|             local T = {
 | |
|                 Idx = "演示字体" + FontIdx,
 | |
|                 XPos = X + 166,
 | |
|                 YPos = Y + 230,
 | |
|                 DamageNum = 999999999,
 | |
|                 Type = 5,
 | |
|                 TimeObj = Timer,
 | |
|                 isKeyHit = false,
 | |
|             }
 | |
|             NeArray.append(T);
 | |
|             DamageFontArray.rawset(1, NeArray);
 | |
|             sq_Rewind(MonsterAni);
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //开启界面回调
 | |
|     function OpenClassCallBack() {
 | |
| 
 | |
|         L_NewWindows("Lenheart", 170, 0x65535);
 | |
|         local W = sq_GetPopupWindowMainCotrol(170);
 | |
|         W.SetVisible(false);
 | |
|         W.SetEnable(false);
 | |
|         if (sq_GetMapIndex(sq_GetGlobaludpModuleStage()) >= 0) MainState = false;
 | |
|         //获取字体列表信息
 | |
|         GetFontList();
 | |
|         if (DamageSkinList.len() > 0) Sobj = ScrollControl(DamageSkinList, 5, 1);
 | |
|     }
 | |
| 
 | |
|     //绘制入口
 | |
|     function Draw(obj) {
 | |
| 
 | |
|         if (MainState) {
 | |
|             if (WindowObj) {
 | |
|                 DrawMain(obj);
 | |
|                 WindowObj.Show(obj);
 | |
|                 X = WindowObj.X;
 | |
|                 Y = WindowObj.Y;
 | |
|             } else {
 | |
|                 WindowObj = DamageFontWindow(X, Y, 788, 576, 28); //坐标 大小 标题栏高度
 | |
|                 //WindowObj.DeBugMode = true;
 | |
|             }
 | |
|         } else {
 | |
|             if (WindowObj && WindowObj.YMouseSw == false) {
 | |
|                 IMouse.ReleaseMouseClick();
 | |
|                 WindowObj.YMouseSw = true;
 | |
|                 WindowObj = null;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         //绘制字体
 | |
|         if (sq_GetCurrentModuleType() == 3 || MainState) DrawFont(obj);
 | |
|         //回到城镇清空字体数组
 | |
|         else {
 | |
|             DamageFontArray = null;
 | |
|             DamageFontArray = {};
 | |
|             MapBaseXPos = 0;
 | |
|             MapBaseYPos = 0;
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //设置NUT白字
 | |
|     function SetNutRate() {
 | |
|         // local allRate = 1.0;
 | |
|         // for (local i = 1; i < 41; i++) {
 | |
|         //     allRate = allRate * (sq_GetIntData(obj, 169, i) / 100).tofloat();
 | |
|         // }
 | |
|         // for (local w = 1; w < 21; w++) {
 | |
|         //     allRate = allRate * (sq_GetIntData(obj, 174, w) / 100).tofloat();
 | |
|         // }
 | |
|         NutWRate = 1.0;
 | |
|     }
 | |
| 
 | |
|     //逻辑入口
 | |
|     function Proc(obj) {
 | |
|         if (KeyPressNB.isKeyPress(48, "DamageFontCloseKey")) {
 | |
|             MainState = false;
 | |
|         }
 | |
|         if (MainState) {
 | |
|             if (IMouse.IsWheelUp()) {
 | |
|                 Sobj.M();
 | |
|             }
 | |
|             if (IMouse.IsWheelDown()) {
 | |
|                 Sobj.A();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //设置地图原点
 | |
|         SetMapBasePos(obj);
 | |
|         //设置NUT白字
 | |
|         SetNutRate();
 | |
|     }
 | |
| 
 | |
|     FontIdx = 0;
 | |
|     MapBaseXPos = 0;
 | |
|     MapBaseYPos = 0;
 | |
|     DamageFontArray = null;
 | |
| 
 | |
|     //设置地图原点
 | |
|     function SetMapBasePos(obj) {
 | |
|         local objectManager = obj.getObjectManager();
 | |
|         if (!objectManager) return;
 | |
|         MapBaseXPos = objectManager.getFieldXPos(0, ENUM_DRAWLAYER_NORMAL);
 | |
|         MapBaseYPos = objectManager.getFieldYPos(0, 0, ENUM_DRAWLAYER_NORMAL);
 | |
|     }
 | |
| 
 | |
|     function TryGetArry(Type) {
 | |
|         if (DamageFontArray.rawin(Type)) return DamageFontArray[Type];
 | |
|         else return [];
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //将伤害字体数据Push进数组
 | |
|     function PushDamageFontArray(ObjAddress, X, Y, Z, Value, Type) {
 | |
|         local Timer = TimeSTL("DamageFontTimer" + ObjAddress + FontIdx, 2000);
 | |
|         Timer.Reset();
 | |
|         Timer.Start();
 | |
|         local gRealType;
 | |
|         if (Type <= 7) gRealType = RealType[Type];
 | |
|         else gRealType = RealType[((Type - 7) % 16) + 7];
 | |
|         //暴击
 | |
|         local KeyHit = false;
 | |
|         if (Type == 17) KeyHit = true;
 | |
|         //是扣血还是回血
 | |
|         if (Type == 7) {
 | |
|             if (Value< 0) gRealType = 4;
 | |
|         }
 | |
|         if (Type == 4) {
 | |
|             if (Value< 0) gRealType = 0;
 | |
|         }
 | |
|         if (Type == 1 || Type == 17) {
 | |
|             local oldDamageNum = Value;
 | |
|             Value = (Value / NutWRate).tointeger();
 | |
|             local newDamageNum = oldDamageNum - Value;
 | |
|             local NeArray = TryGetArry(Type);
 | |
|             local Timer = TimeSTL("WDamageFontTimer" + ObjAddress + FontIdx, 2000);
 | |
|             Timer.Reset();
 | |
|             Timer.Start();
 | |
|             local T = {
 | |
|                 Idx = ObjAddress + FontIdx,
 | |
|                 XPos = X,
 | |
|                 YPos = Y - Z - (NeArray.len() * 6),
 | |
|                 DamageNum = Value,
 | |
|                 Type = 0,
 | |
|                 TimeObj = Timer,
 | |
|                 isKeyHit = KeyHit,
 | |
|             }
 | |
|             NeArray.append(T);
 | |
|             DamageFontArray.rawset(Type, NeArray);
 | |
|             ++FontIdx;
 | |
|         }
 | |
|         local NeArray = TryGetArry(Type);
 | |
|         local T = {
 | |
|             Idx = ObjAddress + FontIdx,
 | |
|             XPos = X,
 | |
|             YPos = Y - Z - (NeArray.len() * 6),
 | |
|             DamageNum = Value,
 | |
|             Type = gRealType,
 | |
|             TimeObj = Timer,
 | |
|             isKeyHit = KeyHit,
 | |
|         }
 | |
|         NeArray.append(T);
 | |
|         DamageFontArray.rawset(Type, NeArray);
 | |
|         ++FontIdx;
 | |
|     }
 | |
| 
 | |
|     function DrawFontImg(X, Y, Type, DamageNum, Time, isKeyHit) {
 | |
|         local rate = sq_GetUniformVelocity(60, 100, Time, 100);
 | |
|         rate = rate.tofloat() / 100.0;
 | |
|         //如果暴击
 | |
|         if (isKeyHit) {
 | |
|             rate *= 1.3;
 | |
|             Type = 4;
 | |
|         }
 | |
|         //白字
 | |
|         if (Type == 0) {
 | |
|             rate *= 0.7;
 | |
|             Y += 60;
 | |
|         }
 | |
|         local UpOffset = 0;
 | |
|         //超过0.3秒开始飘
 | |
|         if (Time >= 600) {
 | |
|             UpOffset = sq_GetUniformVelocity(0, 30, Time - 600, 500);
 | |
|         }
 | |
|         if (DamageNum > MaxDamageNumber) {
 | |
|             if (isKeyHit) {
 | |
|                 foreach(imgpos in DamageSkinList[FocusPrintIdx].KeyMaxNumArr) {
 | |
|                     L_sq_DrawImg(DamageSkinList[FocusPrintIdx].ImgPath, imgpos, X + ((30 * (MaxDamageNumber.tostring().len())) - ((20 * (MaxDamageNumber.tostring().len())) * rate)), Y + (20 - (20 * rate)) - UpOffset, 0, sq_RGBA(255, 255, 255, 255 - (UpOffset * 8)), rate, rate);
 | |
|                 }
 | |
|             } else {
 | |
|                 foreach(imgpos in DamageSkinList[FocusPrintIdx].MaxNumArr) {
 | |
|                     L_sq_DrawImg(DamageSkinList[FocusPrintIdx].ImgPath, imgpos, X + ((30 * (MaxDamageNumber.tostring().len())) - ((20 * (MaxDamageNumber.tostring().len())) * rate)), Y + (20 - (20 * rate)) - UpOffset, 0, sq_RGBA(255, 255, 255, 255 - (UpOffset * 8)), rate, rate);
 | |
|                 }
 | |
|             }
 | |
|         } else {
 | |
|             L_sq_DrawNumber(X + ((30 * (DamageNum.tostring().len())) - ((20 * (DamageNum.tostring().len())) * rate)), Y + (20 - (20 * rate)) - UpOffset, sq_RGBA(255, 255, 255, 255 - (UpOffset * 8)), rate, rate, Type, 18 * rate, 6, sq_Abs(DamageNum));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //伤害字体绘制
 | |
|     function DrawFont(obj) {
 | |
|         foreach(Type, FontArrayObject in DamageFontArray) {
 | |
|             if (Type == 0) continue;
 | |
|             for (local i = 0; i< FontArrayObject.len(); i++) {
 | |
|                 local FontObject = FontArrayObject[i];
 | |
|                 if (FontObject) {
 | |
|                     local Timer = FontObject.TimeObj;
 | |
|                     if (Timer) {
 | |
|                         local Time = Timer.Get();
 | |
|                         if (Time >= 1100) {
 | |
|                             FontObject.TimeObj.Delete();
 | |
|                             FontObject.TimeObj = null;
 | |
|                             FontArrayObject.remove(i);
 | |
|                             continue;
 | |
|                         } else {
 | |
|                             DrawFontImg(FontObject.XPos - MapBaseXPos, FontObject.YPos - MapBaseYPos, FontObject.Type, FontObject.DamageNum, Time, FontObject.isKeyHit);
 | |
|                             //L_sq_DrawCode(FontObject.DamageNum.tostring(), FontObject.XPos - MapBaseXPos, FontObject.YPos - (Time / 100) - MapBaseYPos, sq_RGBA(255, 255, 184, 250), 0, 1);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         //白字
 | |
|         foreach(Type, FontArrayObject in DamageFontArray) {
 | |
|             if (Type != 0) break;
 | |
|             for (local i = 0; i< FontArrayObject.len(); i++) {
 | |
|                 local FontObject = FontArrayObject[i];
 | |
|                 if (FontObject) {
 | |
|                     local Timer = FontObject.TimeObj;
 | |
|                     if (Timer) {
 | |
|                         local Time = Timer.Get();
 | |
|                         if (Time >= 1100) {
 | |
|                             FontObject.TimeObj.Delete();
 | |
|                             FontObject.TimeObj = null;
 | |
|                             FontArrayObject.remove(i);
 | |
|                             continue;
 | |
|                         } else {
 | |
|                             DrawFontImg(FontObject.XPos - MapBaseXPos, FontObject.YPos - MapBaseYPos, FontObject.Type, FontObject.DamageNum, Time, FontObject.isKeyHit);
 | |
|                             //L_sq_DrawCode(FontObject.DamageNum.tostring(), FontObject.XPos - MapBaseXPos, FontObject.YPos - (Time / 100) - MapBaseYPos, sq_RGBA(255, 255, 184, 250), 0, 1);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function T_DrawDynamicAni_Fx(obj, aniFileName, x, y, aniname) {
 | |
|         local ani = obj.getVar().GetAnimationMap(aniname, aniFileName);
 | |
|         ani.setImageRateFromOriginal(-1.0, 1.0);
 | |
|         sq_AnimationProc(ani);
 | |
|         sq_drawCurrentFrame(ani, x, y, true);
 | |
|         return ani;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function DamageFont(obj) {
 | |
|     local RootTab = getroottable();
 | |
|     if (!RootTab.rawin("DamageFontCObj")) {
 | |
|         local Cobj = DamageFontC();
 | |
|         RootTab.rawset("DamageFontCObj", Cobj);
 | |
|         EventIcon("皮肤仓库", 70, 70, Cobj);
 | |
|     } else {
 | |
|         RootTab["DamageFontCObj"].Proc(obj);
 | |
|         RootTab["DamageFontCObj"].Draw(obj);
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type) {
 | |
|     // Sout("对象地址: %L", ObjAddress);
 | |
|     // Sout("X坐标: %L", X);
 | |
|     // Sout("Y坐标: %L", Y);
 | |
|     // Sout("Z坐标: %L", Z);
 | |
|     // Sout("伤害数值: %L", Value);
 | |
|     // Sout("伤害类型: %L", Type);
 | |
| 
 | |
|     getroottable()["DamageFontCObj"].PushDamageFontArray(ObjAddress, X - 100, Y, Z, Value, Type);
 | |
| } |