589 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			589 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:AncientheroLuckyBox.nut
 | |
| 路径:Project/AncientheroLuckyBox/AncientheroLuckyBox.nut
 | |
| 创建日期:2025-07-08	18:44
 | |
| 文件用途:圣者遗物箱
 | |
| */
 | |
| class AncientheroLuckyBoxC extends LenheartNewUI_Windows {
 | |
|     //调试模式
 | |
|     // DeBugMode = true;
 | |
| 
 | |
|     //不是窗口
 | |
|     // NoWindow = true;
 | |
| 
 | |
|     //是否可见
 | |
|     // Visible = false;
 | |
| 
 | |
|     Img = null;
 | |
| 
 | |
|     //遗物箱ID
 | |
|     BoxId = 15;
 | |
|     //盒子数量
 | |
|     BoxCount = 0;
 | |
|     //能量
 | |
|     Energy = 0;
 | |
| 
 | |
|     //奖励查询网站
 | |
|     RewardUrl = "https://www.baidu.com";
 | |
| 
 | |
|     //打开状态 0未打开 1单抽 10十连抽
 | |
|     OpenFlag = 1;
 | |
| 
 | |
|     //抽奖模式按钮集合
 | |
|     OpenBtns = null;
 | |
| 
 | |
|     //动画队列
 | |
|     AniQueue = null;
 | |
| 
 | |
|     //奖励动画盒子
 | |
|     SmallBoxList = null;
 | |
|     BigBox = null;
 | |
| 
 | |
|     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
 | |
|         Childrens = [];
 | |
|         AniQueue = QuestQueue();;
 | |
|         //注册控件
 | |
|         RegisterWidget();
 | |
| 
 | |
|         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
 | |
| 
 | |
|         Img = {};
 | |
|         Img["main"] <- Rindro_Image("interface2/event/chn_event_2020/201029_ancientheroluckybox/ancientbox.img");
 | |
|         Img["yosin"] <- Rindro_Image("yosin/db_newani.img");
 | |
|         Img["yosin_bd"] <- Rindro_Image("yosin/db_newani_bd.img");
 | |
| 
 | |
| 
 | |
|         SmallBoxList = [];
 | |
|         for (local i = 0; i< 20; i++) {
 | |
|             local Buffer = AncientheroLuckyBoxC_Box(this, i);
 | |
|             SmallBoxList.append(Buffer);
 | |
|         }
 | |
| 
 | |
|         BigBox = AncientheroLuckyBoxC_BigBox(this, 99);
 | |
| 
 | |
|         //配置回包
 | |
|         RegisterPack(20074004, function(Chunk) {
 | |
|             local Jso = Json.Decode(Chunk);
 | |
|             this.Visible = true;
 | |
| 
 | |
|             //重置
 | |
|             OpenFlag = 0;
 | |
|             foreach(Obj in SmallBoxList) {
 | |
|                 Obj.Reset();
 | |
|                 BigBox.Reset();
 | |
|             }
 | |
| 
 | |
|             this.BoxId = Jso["BoxId"];
 | |
|             this.BoxCount = Jso["BoxCount"];
 | |
|             this.RewardUrl = Jso["ProbabilityTab"];
 | |
|             this.Energy = Jso["nl"];
 | |
|         }.bindenv(this));
 | |
| 
 | |
| 
 | |
|         //配置回包
 | |
|         RegisterPack(20094008, function(Chunk) {
 | |
|             local Jso = Json.Decode(Chunk);
 | |
|             this.BoxCount = Jso["BoxCount"];
 | |
|             this.Energy = Jso["nl"];
 | |
| 
 | |
|             this.OpenFlag = Jso["itemBuffers"].len();
 | |
|             if (this.OpenFlag == 10) {
 | |
|                 foreach(Pos, obj in Jso["itemBuffers"]) {
 | |
|                     //因为曾服务端这里发的数组 估计是土罐抄过来的龙盒只有一个道具 只取0号位
 | |
|                     local Info = obj;
 | |
|                     local RandomScript = GetRewardAniScript(Info.typ);
 | |
|                     SmallBoxList[Pos].SetInfo(Info.itemid, Info.num, RandomScript, Info.typ);
 | |
|                 }
 | |
|             } else if (this.OpenFlag == 1) {
 | |
|                 local Info = Jso["itemBuffers"][0];
 | |
|                 BigBox.SetInfo(Info.itemid, Info.num, GetRewardAniScript(Info.typ), Info.typ);
 | |
|             }
 | |
|         }.bindenv(this));
 | |
| 
 | |
|         // local monipack = "{\"uid\":1,\"op\":20094008,\"itemBuffers\":[[{\"typ\":1,\"itemid\":3037,\"num\":3}],[{\"typ\":1,\"itemid\":3037,\"num\":2}],[{\"typ\":1,\"itemid\":3037,\"num\":1}],[{\"typ\":1,\"itemid\":3037,\"num\":1}],[{\"typ\":1,\"itemid\":3037,\"num\":1}],[{\"typ\":1,\"itemid\":3037,\"num\":3}],[{\"typ\":1,\"itemid\":3037,\"num\":3}],[{\"typ\":1,\"itemid\":3037,\"num\":3}],[{\"typ\":1,\"itemid\":3037,\"num\":3}],[{\"typ\":2,\"itemid\":3037,\"num\":1}]],\"nl\":80,\"cid\":1,\"BoxCount\":67}";
 | |
| 
 | |
| 
 | |
|         // local monipack = "{\"BoxCount\":76,\"cid\":1,\"itemBuffers\":[{\"itemid\":3038,\"num\":1,\"typ\":3}],\"nl\":0,\"op\":20094008,\"uid\":1}";
 | |
|         // Pack_Control[20094008](monipack);
 | |
|     }
 | |
| 
 | |
|     function GetRewardAniScript(Grade) {
 | |
|         local Middle = "";
 | |
|         switch (Grade) {
 | |
|             case 0: {
 | |
|                 Middle = "box_b";
 | |
|                 break;
 | |
|             }
 | |
|             case 1: {
 | |
|                 switch (sq_getRandom(0, 1)) {
 | |
|                     case 0:
 | |
|                         Middle = "box_b_a";
 | |
|                         break;
 | |
|                     case 1:
 | |
|                         Middle = "box_a";
 | |
|                         break;
 | |
|                 }
 | |
|                 break;
 | |
|             }
 | |
|             case 2: {
 | |
|                 switch (sq_getRandom(0, 2)) {
 | |
|                     case 0:
 | |
|                         Middle = "box_b_s";
 | |
|                         break;
 | |
|                     case 1:
 | |
|                         Middle = "box_a_s";
 | |
|                         break;
 | |
|                     case 2:
 | |
|                         Middle = "box_s";
 | |
|                         break;
 | |
|                 }
 | |
|                 break;
 | |
|             }
 | |
|             case 3: {
 | |
|                 switch (sq_getRandom(0, 3)) {
 | |
|                     case 0:
 | |
|                         Middle = "box_b_ss";
 | |
|                         break;
 | |
|                     case 1:
 | |
|                         Middle = "box_a_ss";
 | |
|                         break;
 | |
|                     case 2:
 | |
|                         Middle = "box_s_ss";
 | |
|                         break;
 | |
|                     case 3:
 | |
|                         Middle = "box_ss";
 | |
|                         break;
 | |
|                 }
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|         return Middle;
 | |
|     }
 | |
| 
 | |
|     function RegisterWidget() {
 | |
|         //关闭按钮
 | |
|         local CloseButton = LenheartNewUI_BaseButton(763, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
 | |
|         CloseButton.OnClick = function() {
 | |
|             this.Visible = false;
 | |
|         }.bindenv(this);
 | |
|         Childrens.append(CloseButton);
 | |
| 
 | |
|         OpenBtns = [];
 | |
|         //单抽复选框
 | |
|         local OneOpenBtn = LenheartNewUI_SwitchButtonText(196, 425, "      开启1个");
 | |
|         OneOpenBtn.ImgIndex = 358;
 | |
|         OneOpenBtn.SetTextPos(12, 2);
 | |
|         OneOpenBtn.Width = 130;
 | |
|         OneOpenBtn.Height = 16;
 | |
|         OneOpenBtn.OnClickEx = function(Btn) {
 | |
|             CallOpenAnimation(OpenFlag == 0);
 | |
|             OpenFlag = 1;
 | |
|             OpenBtns[1].State = 0;
 | |
|             Btn.State = 1;
 | |
|         }.bindenv(this);
 | |
|         AddChild(OneOpenBtn);
 | |
|         OpenBtns.append(OneOpenBtn);
 | |
| 
 | |
|         //单抽复选框
 | |
|         local TenOpenBtn = LenheartNewUI_SwitchButtonText(458, 425, "      开启10个");
 | |
|         TenOpenBtn.ImgIndex = 358;
 | |
|         TenOpenBtn.SetTextPos(12, 2);
 | |
|         TenOpenBtn.Width = 130;
 | |
|         TenOpenBtn.Height = 16;
 | |
|         TenOpenBtn.OnClickEx = function(Btn) {
 | |
|             CallOpenAnimation(OpenFlag == 0);
 | |
|             OpenFlag = 10;
 | |
|             OpenBtns[0].State = 0;
 | |
|             Btn.State = 1;
 | |
|         }.bindenv(this);
 | |
|         AddChild(TenOpenBtn);
 | |
|         OpenBtns.append(TenOpenBtn);
 | |
| 
 | |
|         //抽奖按钮
 | |
|         local UseButton = LenheartNewUI_ButtonText(356, 500, 15, "开   启");
 | |
|         // UseButton.SetFrame(null, 323);
 | |
|         UseButton.SetTextOffset(-3, 1);
 | |
|         UseButton.OnClickEx = function(Btn) {
 | |
|             if (OpenFlag == 0 || AniQueue.Queue.len() != 0) return;
 | |
|             foreach(Obj in SmallBoxList) {
 | |
|                 Obj.Reset();
 | |
|                 BigBox.Reset();
 | |
|             }
 | |
|             SendPackEx({
 | |
|                 op = 20094005,
 | |
|                 Num = OpenFlag
 | |
|             });
 | |
|         }.bindenv(this);
 | |
|         AddChild(UseButton);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //调用打开界面动画
 | |
|     function CallOpenAnimation(Flag) {
 | |
|         R_Utils.PlaySound("ANCIENTBOX_WHEEL");
 | |
|         //Flag 为true时是第一次进入 盖着盖子的状态  false 需要先盖上再打开
 | |
|         AniQueue.AddQuest("打开界面动画", function(Name, Time, Flag) {
 | |
|             if (Flag) {
 | |
|                 local Ani = DrawAniEx(X + 5, Y + 25, "common/ancientheroluckybox/animation/intro.ani");
 | |
|                 if (sq_IsEnd(Ani)) {
 | |
|                     sq_Rewind(Ani);
 | |
|                     AniQueue.RemoveQuest(Name);
 | |
|                 }
 | |
|             } else {
 | |
|                 local Ani = DrawAniEx(X + 5, Y + 25, "common/ancientheroluckybox/animation/outro.ani");
 | |
|                 if (sq_IsEnd(Ani)) {
 | |
|                     sq_Rewind(Ani);
 | |
|                     AniQueue.RemoveQuest(Name);
 | |
|                     CallOpenAnimation(true);
 | |
|                 }
 | |
|             }
 | |
|         }.bindenv(this), Flag);
 | |
|     }
 | |
| 
 | |
|     //绘制主界面
 | |
|     function DrawMain(obj) {
 | |
|         //绘制背景
 | |
|         Img["yosin"].DrawPng(0, X, Y);
 | |
|         //未打开状态
 | |
|         if (OpenFlag == 0) Img["main"].DrawPng(1, X + 5, Y + 25);
 | |
| 
 | |
|         //绘制圣者遗物箱图标
 | |
|         DrawItemBase(X + 377, Y + 394, BoxId, BoxCount);
 | |
|         //绘制圣者遗物箱能量
 | |
|         if (Energy< 100) Img["yosin_bd"].DrawPng(Energy, X + 350, Y + 368);
 | |
|         else {
 | |
|             Img["yosin"].DrawPng(2, X, Y);
 | |
| 
 | |
|             local T = Clock() % 2000;
 | |
|             local Alpha = 0;
 | |
|             if (T< 1000) {
 | |
|                 Alpha = 150 + 105 * (T.tofloat() / 1000.0);
 | |
|             } else {
 | |
|                 Alpha = 255 - 105 * ((T - 1000).tofloat() / 1000.0);
 | |
|             }
 | |
|             Img["yosin_bd"].DrawExPng(100, X + 350, Y + 368, 0, sq_RGBA(255, 255, 255, Alpha.tointeger()), 1.0, 1.0)
 | |
|         }
 | |
|         L_sq_DrawCode(Energy.tostring() + "%", X + 426 - (LenheartTextClass.GetStringLength(Energy.tostring() + "%") / 2), Y + 437, sq_RGBA(179, 169, 135, 255), 0, 1);
 | |
| 
 | |
|         if (OpenFlag == 10) {
 | |
|             //绘制奖励动画
 | |
|             for (local i = 0; i< SmallBoxList.len(); i++) {
 | |
|                 SmallBoxList[i].Draw(obj, X - 12 + (150 * (i % 5)), Y + 70 + (128 * (i / 5)));
 | |
|             }
 | |
|         } else if (OpenFlag == 1) {
 | |
|             BigBox.Draw(obj, X + 226, Y + 80);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     function Show(obj) {
 | |
|         DrawMain(obj);
 | |
|         AniQueue.Run();
 | |
|         LenheartNewUI_Windows.Show(obj);
 | |
|     }
 | |
| 
 | |
|     //逻辑入口
 | |
|     function Proc(obj) {
 | |
|         LenheartNewUI_Windows.SyncPos(X, Y);
 | |
|     }
 | |
| 
 | |
|     //重置
 | |
|     function ResetData() {
 | |
|         if (OpenBtns) {
 | |
|             OpenBtns[0].State = 0;
 | |
|             OpenBtns[1].State = 0;
 | |
|         }
 | |
|         OpenFlag = 0;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function Lenheart_AncientheroLuckyBox_Fun(obj) {
 | |
|     local RootTab = getroottable();
 | |
|     if (!RootTab.rawin("AncientheroLuckyBox_Obj")) {
 | |
|         RootTab.rawset("AncientheroLuckyBox_Obj", true);
 | |
|         LenheartNewUI_CreateWindow(AncientheroLuckyBoxC, "圣者遗物箱窗口", ((getroottable().Rindro_Scr_Width - 782) / 2).tointeger(), 30, 782, 600, 28);
 | |
|     }
 | |
| }
 | |
| 
 | |
| getroottable()["LenheartFuncTab"].rawset("AncientheroLuckyBoxFuncN", Lenheart_AncientheroLuckyBox_Fun);
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| L_Windows_List <- [];
 | |
| getroottable().rawdelete("LenheartPluginsInitFlag");
 | |
| getroottable().rawdelete("EventList_Obj")
 | |
| getroottable().rawdelete("AncientheroLuckyBox_Obj");
 | |
| 
 | |
| 
 | |
| //任务队列
 | |
| class QuestQueue {
 | |
|     //队列
 | |
|     Queue = null;
 | |
| 
 | |
|     constructor() {
 | |
|         Queue = {};
 | |
|     }
 | |
| 
 | |
|     //添加任务
 | |
|     function AddQuest(QuestName, QuestLogic, ...) {
 | |
|         local args = null;
 | |
|         if (vargc > 0) {
 | |
|             args = [];
 | |
|             for (local i = 0; i< vargc; i++) {
 | |
|                 args.append(vargv[i]);
 | |
|             }
 | |
|         }
 | |
|         Queue[QuestName] <- {
 | |
|             Logic = QuestLogic,
 | |
|             InseartTime = Clock(),
 | |
|             arg = args
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     //移除任务
 | |
|     function RemoveQuest(QuestName) {
 | |
|         if (Queue) {
 | |
|             Queue.rawdelete(QuestName);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //执行任务
 | |
|     function Run() {
 | |
|         if (Queue) {
 | |
|             local NowTime = Clock();
 | |
|             foreach(QuestName, QuestInfo in Queue) {
 | |
|                 if (QuestInfo.arg && QuestInfo.arg.len() > 0) {
 | |
|                     local Arr = [];
 | |
|                     Arr.append(getroottable());
 | |
|                     Arr.append(QuestName);
 | |
|                     Arr.append(NowTime);
 | |
|                     foreach(value in QuestInfo.arg) {
 | |
|                         Arr.append(value);
 | |
|                     }
 | |
|                     QuestInfo.Logic.acall(Arr);
 | |
|                     // QuestInfo.Logic(QuestName, NowTime - QuestInfo.InseartTime, QuestInfo.arg);
 | |
|                 } else QuestInfo.Logic(QuestName, NowTime - QuestInfo.InseartTime);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //示例
 | |
| 
 | |
|     /*
 | |
|         Obj.AddQuest("测试任务",function (Name,Time)
 | |
|         {
 | |
|             print(Time);
 | |
|             if(Time >= 2000)Obj.RemoveQuest(Name);
 | |
|         }.bindenv(this));
 | |
|     */
 | |
| }
 | |
| 
 | |
| class AncientheroLuckyBoxC_Box extends Rindro_BaseToolClass {
 | |
| 
 | |
|     //父对象
 | |
|     Parent = null;
 | |
|     //标识ID
 | |
|     Idx = null;
 | |
| 
 | |
|     //状态  0未设置 1已设置 2播放动画 3播放动画结束
 | |
|     Status = 0;
 | |
|     //道具是否显示
 | |
|     ItemVisFlag = false;
 | |
| 
 | |
|     //奖励道具
 | |
|     ItemId = null;
 | |
|     //奖励道具名字
 | |
|     ItemName = null;
 | |
|     //奖励道具名字颜色
 | |
|     ItemNameColor = null;
 | |
|     //奖励道具数量
 | |
|     Count = null;
 | |
|     //奖励动画
 | |
|     Ani = null;
 | |
|     //音效
 | |
|     Sound = null;
 | |
|     //品级
 | |
|     Grade = null;
 | |
|     GradeList = ["b", "a", "s", "ss"];
 | |
|     GradeCorlorList = [sq_RGBA(255, 255, 255, 255), sq_RGBA(104, 213, 237, 255), sq_RGBA(179, 107, 255, 255), sq_RGBA(255, 0, 240, 255), sq_RGBA(255, 177, 0, 255), sq_RGBA(255, 102, 102, 255)];
 | |
| 
 | |
|     //标识Flag
 | |
|     Flag = null;
 | |
| 
 | |
|     constructor(P, Idx) {
 | |
|         this.Parent = P;
 | |
|         this.Idx = Idx;
 | |
|     }
 | |
| 
 | |
|     function Draw(obj, X, Y) {
 | |
|         //如果已设置 可以开始播放
 | |
|         if (Status == 1) {
 | |
|             Status = 2;
 | |
|             Flag = this.Idx + Ani + Clock();
 | |
|         }
 | |
| 
 | |
|         if (Status == 2) {
 | |
|             local Ani = DrawAniEx(X, Y, Ani, Flag);
 | |
|             //当Ani播放时间大于百分之90时
 | |
|             if (sq_GetCurrentTime(Ani) > (Ani.getDelaySum(false) * 0.9).tointeger()) {
 | |
|                 ItemVisFlag = true;
 | |
|             }
 | |
|             if (sq_IsEnd(Ani)) {
 | |
|                 sq_Rewind(Ani);
 | |
|                 Status = 3;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //如果需要显示道具
 | |
|         if (ItemVisFlag) {
 | |
|             X += 10;
 | |
|             DrawAniEx(X + 24, Y + 80, "common/ancientheroluckybox/animation/item_mini_" + this.Grade + "_loop.ani", Flag + "Item");
 | |
|             //绘制道具
 | |
|             Parent.DrawItemBase(X + 27, Y + 83, ItemId, Count);
 | |
|             //绘制道具名字
 | |
|             L_sq_DrawCode(this.ItemName, X + 107 - (LenheartTextClass.GetStringLength(this.ItemName) / 2), Y + 91, ItemNameColor, 0, 1);
 | |
|             DrawAniEx(X + 24 + 25, Y + 80 + 5, "common/ancientheroluckybox/animation/item_mini_" + this.Grade + "_start.ani", Flag + "ItemStart");
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //设置信息
 | |
|     function SetInfo(ItemId, Count, RandomScript, Grade) {
 | |
|         if (Status == 0) {
 | |
|             this.ItemId = ItemId;
 | |
| 
 | |
|             local ItemObject = L_sq_GetItem(ItemId);
 | |
|             local NamePointer = L_sq_RA(ItemObject + 0x20);
 | |
|             this.ItemName = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString();
 | |
| 
 | |
|             local Rarity = L_sq_RA(ItemObject + 0xF4);
 | |
|             this.ItemNameColor = GradeCorlorList[Rarity];
 | |
| 
 | |
|             this.Count = Count;
 | |
|             this.Ani = "common/ancientheroluckybox/animation/mini_" + RandomScript + ".ani";
 | |
|             this.Sound = "ANCIENTBOX_OPEN_" + RandomScript.slice(4);
 | |
|             this.Grade = GradeList[Grade];
 | |
|             R_Utils.PlaySound(this.Sound);
 | |
|             Status = 1;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //重置
 | |
|     function Reset() {
 | |
|         Status = 0;
 | |
|         ItemId = null;
 | |
|         ItemName = null;
 | |
|         ItemNameColor = null;
 | |
|         Ani = null;
 | |
|         Sound = null;
 | |
|         ItemVisFlag = false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| class AncientheroLuckyBoxC_BigBox extends Rindro_BaseToolClass {
 | |
| 
 | |
|     //父对象
 | |
|     Parent = null;
 | |
|     //标识ID
 | |
|     Idx = null;
 | |
| 
 | |
|     //状态  0未设置 1已设置 2播放动画 3播放动画结束
 | |
|     Status = 0;
 | |
|     //道具是否显示
 | |
|     ItemVisFlag = false;
 | |
| 
 | |
|     //奖励道具
 | |
|     ItemId = null;
 | |
|     //奖励道具名字
 | |
|     ItemName = null;
 | |
|     //奖励道具名字颜色
 | |
|     ItemNameColor = null;
 | |
|     //奖励道具数量
 | |
|     Count = null;
 | |
|     //奖励动画
 | |
|     Ani = null;
 | |
|     //音效
 | |
|     Sound = null;
 | |
|     //品级
 | |
|     Grade = null;
 | |
|     GradeList = ["b", "a", "s", "ss"];
 | |
|     GradeCorlorList = [sq_RGBA(255, 255, 255, 255), sq_RGBA(104, 213, 237, 255), sq_RGBA(179, 107, 255, 255), sq_RGBA(255, 0, 240, 255), sq_RGBA(255, 177, 0, 255), sq_RGBA(255, 102, 102, 255)];
 | |
| 
 | |
|     //标识Flag
 | |
|     Flag = null;
 | |
| 
 | |
|     constructor(P, Idx) {
 | |
|         this.Parent = P;
 | |
|         this.Idx = Idx;
 | |
|     }
 | |
| 
 | |
|     function Draw(obj, X, Y) {
 | |
|         //如果已设置 可以开始播放
 | |
|         if (Status == 1) {
 | |
|             Status = 2;
 | |
|             Flag = this.Idx + Ani + Clock();
 | |
|         }
 | |
| 
 | |
|         if (Status == 2) {
 | |
|             local Ani = DrawAniEx(X, Y, Ani, Flag);
 | |
|             //当Ani播放时间大于百分之90时
 | |
|             if (sq_GetCurrentTime(Ani) > (Ani.getDelaySum(false) * 0.9).tointeger()) {
 | |
|                 ItemVisFlag = true;
 | |
|             }
 | |
|             if (sq_IsEnd(Ani)) {
 | |
|                 sq_Rewind(Ani);
 | |
|                 Status = 3;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //如果需要显示道具
 | |
|         if (ItemVisFlag) {
 | |
|             X += 74;
 | |
|             Y += 60;
 | |
|             DrawAniEx(X + 24, Y + 80, "common/ancientheroluckybox/animation/item_mini_" + this.Grade + "_loop.ani", Flag + "Item");
 | |
|             //绘制道具
 | |
|             Parent.DrawItemBase(X + 27, Y + 83, ItemId, Count);
 | |
|             //绘制道具名字
 | |
|             L_sq_DrawCode(this.ItemName, X + 107 - (LenheartTextClass.GetStringLength(this.ItemName) / 2), Y + 91, ItemNameColor, 0, 1);
 | |
|             DrawAniEx(X + 24 + 25, Y + 80 + 5, "common/ancientheroluckybox/animation/item_mini_" + this.Grade + "_start.ani", Flag + "ItemStart");
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     //设置信息
 | |
|     function SetInfo(ItemId, Count, RandomScript, Grade) {
 | |
|         if (Status == 0) {
 | |
|             this.ItemId = ItemId;
 | |
| 
 | |
|             local ItemObject = L_sq_GetItem(ItemId);
 | |
|             local NamePointer = L_sq_RA(ItemObject + 0x20);
 | |
|             this.ItemName = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString();
 | |
| 
 | |
|             local Rarity = L_sq_RA(ItemObject + 0xF4);
 | |
|             this.ItemNameColor = GradeCorlorList[Rarity];
 | |
| 
 | |
|             this.Count = Count;
 | |
|             this.Ani = "common/ancientheroluckybox/animation/" + RandomScript + ".ani";
 | |
|             this.Sound = "ANCIENTBOX_OPEN_" + RandomScript.slice(4);
 | |
|             this.Grade = GradeList[Grade];
 | |
|             R_Utils.PlaySound(this.Sound);
 | |
|             Status = 1;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //重置
 | |
|     function Reset() {
 | |
|         Status = 0;
 | |
|         ItemId = null;
 | |
|         ItemName = null;
 | |
|         ItemNameColor = null;
 | |
|         Ani = null;
 | |
|         Sound = null;
 | |
|         ItemVisFlag = false;
 | |
|     }
 | |
| } |