328 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			328 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:FiendReward.nut
 | |
| 路径:Project/Fiendwar/FiendReward.nut
 | |
| 创建日期:2024-11-26	14:44
 | |
| 文件用途:
 | |
| */
 | |
| class FiendRewardC extends LenheartNewUI_Windows {
 | |
|     //调试模式
 | |
|     DeBugMode = true;
 | |
|     //默认显示状态需要是关闭 因为要通过收包打开
 | |
|     Visible = false;
 | |
| 
 | |
|     //奖励信息
 | |
|     RewardInfo = null;
 | |
|     //奖励动画开始时间
 | |
|     AniStartFlag = null;
 | |
| 
 | |
|     //收到奖励包
 | |
|     function RewardCallBack(Chunk) {
 | |
|         // Sout("收到请求加入包 : \n\n\n %L", Chunk);
 | |
|         local Jso = Json.Decode(Chunk);
 | |
|         RewardInfo = Jso;
 | |
|         Visible = true;
 | |
|         AniStartFlag = Clock();
 | |
|     }
 | |
| 
 | |
|     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
 | |
|         Childrens = [];
 | |
|         //注册控件
 | |
|         RegisterWidget();
 | |
| 
 | |
|         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
 | |
| 
 | |
|         Pack_Control.rawset(20063026, RewardCallBack.bindenv(this));
 | |
| 
 | |
|         local T = {
 | |
|             op = 20063061,
 | |
|         }
 | |
|         Rindro_BaseToolClass.SendPackEx(T);
 | |
|     }
 | |
| 
 | |
|     function RegisterWidget() {
 | |
|         // //关闭按钮
 | |
|         // local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
 | |
|         // CloseButton.OnClick = function() {
 | |
|         //     this.Visible = false;
 | |
|         // }.bindenv(this);
 | |
|         // Childrens.append(CloseButton);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     AniName_Flag = 0;
 | |
|     AniActFlag = 0;
 | |
|     Ani_Title = null;
 | |
|     Ani_Time = null;
 | |
|     Ani_Time2 = null;
 | |
|     Ani_Card_1 = null;
 | |
|     Ani_Card_2 = null;
 | |
|     Ani_Card_Open_1 = null;
 | |
|     Ani_Card_Open_2 = null;
 | |
|     AniTimeStartFlag = 0;
 | |
|     AniRewardMyStartFlag = 0;
 | |
|     Ani_Card_All_1 = null;
 | |
|     Ani_Card_All_Open = null;
 | |
|     Ani_Card_All_Open_Gold = null;
 | |
|     AniRewardReloadFlag = 0;
 | |
|     AlphaValue = 0.0;
 | |
|     //绘制主界面
 | |
|     function DrawMain(obj) {
 | |
|         if (AniStartFlag) {
 | |
|             local ExiTime = Clock() - AniStartFlag;
 | |
| 
 | |
|             //绘制背景
 | |
|             L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 0, X + 0, Y + 0, 1, sq_RGBA(255, 255, 255, 150), 1.0, 1.0);
 | |
| 
 | |
|             //标题一阶段
 | |
|             Ani_Title = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_title_00.ani", X + 188, Y + 30, "超时空奖励标题1" + AniName_Flag);
 | |
|             if (sq_IsEnd(Ani_Title)) {
 | |
|                 if (AniActFlag == 0) AniActFlag = 1;
 | |
|             }
 | |
|             //时间二阶段
 | |
|             if (AniActFlag >= 1) {
 | |
|                 Ani_Time = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_time.ani", X + 55, Y + 120, "超时空奖励标题2" + AniName_Flag);
 | |
|                 if (sq_IsEnd(Ani_Time)) {
 | |
|                     if (AniActFlag == 1) AniActFlag = 2;
 | |
|                 }
 | |
|             }
 | |
|             //时间三阶段
 | |
|             if (AniActFlag >= 2) {
 | |
|                 Ani_Time2 = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_rank_00.ani", X + 570, Y + 90, "超时空奖励标题3" + AniName_Flag);
 | |
|                 if (sq_IsEnd(Ani_Time2)) {
 | |
|                     //记录一下时间
 | |
|                     if (AniActFlag == 2) {
 | |
|                         AniTimeStartFlag = Clock();
 | |
|                         AniActFlag = 3;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //时间四阶段
 | |
|             if (AniActFlag >= 3) {
 | |
|                 local al = sq_GetUniformVelocity(0, 100, Clock() - AniTimeStartFlag, 1500);
 | |
|                 AlphaValue = al.tofloat() / 100.0;
 | |
| 
 | |
|                 local RealTime = RewardInfo.time;
 | |
|                 local seconds = RealTime / 10;
 | |
|                 local hours = seconds / 3600;
 | |
|                 local minutes = seconds / 60;
 | |
| 
 | |
|                 seconds %= 60;
 | |
|                 hours = format("%02d", hours);
 | |
|                 seconds = format("%02d", seconds).slice(-2);
 | |
|                 minutes = format("%02d", minutes).slice(-2);
 | |
| 
 | |
|                 local Offset = -6;
 | |
|                 DrawImg("hud/fiendwartime.img", hours.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
 | |
|                 DrawImg("hud/fiendwartime.img", hours.slice(1).tointeger(), X + 260 + Offset, Y + 139);
 | |
|                 DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
 | |
|                 Offset += 60;
 | |
|                 DrawImg("hud/fiendwartime.img", minutes.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
 | |
|                 DrawImg("hud/fiendwartime.img", minutes.slice(1).tointeger(), X + 260 + Offset, Y + 139);
 | |
|                 DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
 | |
|                 Offset += 60;
 | |
|                 DrawImg("hud/fiendwartime.img", seconds.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
 | |
|                 DrawImg("hud/fiendwartime.img", seconds.slice(1).tointeger(), X + 260 + Offset, Y + 139);
 | |
| 
 | |
|                 Offset += 160;
 | |
|                 local DieCount = RewardInfo.deathsNum;
 | |
|                 local DrawDieStr = format("%02d", DieCount);
 | |
|                 DrawImg("hud/fiendwartime.img", DrawDieStr.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
 | |
|                 DrawImg("hud/fiendwartime.img", DrawDieStr.slice(1).tointeger(), X + 260 + Offset, Y + 139);
 | |
| 
 | |
|                 if (al >= 100) {
 | |
|                     if (AniActFlag == 3) {
 | |
|                         AniActFlag = 4;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //卡牌一阶段
 | |
|             if (AniActFlag == 4) {
 | |
|                 Ani_Card_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_01.ani", X + 0, Y + 30, "超时空奖励个人第一张卡牌" + AniName_Flag);
 | |
|                 Ani_Card_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_02.ani", X + 0, Y + 30, "超时空奖励个人第二张卡牌" + AniName_Flag);
 | |
|                 if (sq_IsEnd(Ani_Card_1) && sq_IsEnd(Ani_Card_2)) {
 | |
|                     if (AniActFlag == 4) AniActFlag = 5;
 | |
|                 }
 | |
|             }
 | |
|             //卡牌二阶段
 | |
|             if (AniActFlag == 5) {
 | |
|                 Ani_Card_Open_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 218, Y + 280, "超时空奖励个人第一张卡牌打开" + AniName_Flag);
 | |
|                 Ani_Card_Open_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 406, Y + 280, "超时空奖励个人第二张卡牌打开" + AniName_Flag);
 | |
|                 if (sq_IsEnd(Ani_Card_Open_1) && sq_IsEnd(Ani_Card_Open_2)) {
 | |
|                     if (AniActFlag == 5) {
 | |
|                         AniRewardMyStartFlag = Clock();
 | |
|                         AniActFlag = 6;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //卡牌三阶段
 | |
|             if (AniActFlag == 6) {
 | |
|                 local BackGroundFlag = 0;
 | |
|                 if (RewardInfo.rewards[0].item == -1) BackGroundFlag = 1;
 | |
|                 DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 218, Y + 280);
 | |
|                 DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 406, Y + 280);
 | |
| 
 | |
|                 DrawItemEx(X + 290, Y + 342, RewardInfo.rewards[0].item, RewardInfo.rewards[0].num, RewardInfo.pid, 0, -10);
 | |
|                 DrawItemEx(X + 478, Y + 342, RewardInfo.rewards[0].item2, RewardInfo.rewards[0].num2, RewardInfo.pid, 0, -10);
 | |
| 
 | |
|                 if ((Clock() - AniRewardMyStartFlag) >= 1500) {
 | |
|                     AniActFlag = 7;
 | |
|                 }
 | |
|             }
 | |
|             //卡牌四阶段
 | |
|             if (AniActFlag == 7) {
 | |
|                 Ani_Card_All_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_00.ani", X + 0, Y + 0, "二阶段翻牌未翻开" + AniName_Flag);
 | |
|                 if (sq_IsEnd(Ani_Card_All_1)) {
 | |
|                     if (AniActFlag == 7) {
 | |
|                         Ani_Card_All_Open = array(8);
 | |
|                         Ani_Card_All_Open_Gold = array(8);
 | |
|                         AniActFlag = 8;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //卡牌五阶段
 | |
|             if (AniActFlag == 8) {
 | |
|                 for (local i = 0; i< 8; i++) {
 | |
|                     Ani_Card_All_Open[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开" + "i" + AniName_Flag);
 | |
| 
 | |
|                     if (i<(RewardInfo.rewards2.len() - 1) && RewardInfo.rewards2[i][0].grade == 1) {
 | |
|                         Ani_Card_All_Open_Gold[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/gold_nomal.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开金牌" + "i" + AniName_Flag);
 | |
|                     }
 | |
|                 }
 | |
|                 if (sq_IsEnd(Ani_Card_All_Open[7])) {
 | |
|                     if (AniActFlag == 8) {
 | |
|                         AniActFlag = 9;
 | |
|                         AniRewardReloadFlag = Clock();
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             //卡牌六阶段
 | |
|             if (AniActFlag == 9) {
 | |
|                 for (local i = 0; i< 8; i++) {
 | |
|                     DrawRewardCard(i);
 | |
|                 }
 | |
|                 //重置
 | |
|                 if (Clock() - AniRewardReloadFlag >= 2000) {
 | |
|                     AniActFlag = 0;
 | |
|                     Ani_Title = null;
 | |
|                     Ani_Time = null;
 | |
|                     Ani_Time2 = null;
 | |
|                     Ani_Card_1 = null;
 | |
|                     Ani_Card_2 = null;
 | |
|                     Ani_Card_Open_1 = null;
 | |
|                     Ani_Card_Open_2 = null;
 | |
|                     AniTimeStartFlag = 0;
 | |
|                     AniRewardMyStartFlag = 0;
 | |
|                     Ani_Card_All_1 = null;
 | |
|                     Ani_Card_All_Open = null;
 | |
|                     Ani_Card_All_Open_Gold = null;
 | |
|                     AniRewardReloadFlag = 0;
 | |
|                     AlphaValue = 0.0;
 | |
|                     RewardInfo = null;
 | |
|                     AniStartFlag = null;
 | |
|                     AniName_Flag += 1;
 | |
|                     CloseWindow();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     function DrawRewardCard(Index) {
 | |
|         if (Index > (RewardInfo.rewards2.len() - 1)) {
 | |
|             DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 24, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
 | |
|             return;
 | |
|         }
 | |
|         local Info = RewardInfo.rewards2[Index][0];
 | |
|         local BackGroundFlag = 0;
 | |
|         if (Info.count == 0) {
 | |
|             BackGroundFlag = 1;
 | |
|             DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
 | |
|             DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
 | |
|         }
 | |
|         if (Info.count == 1) {
 | |
|             if (Info.grade == 1)(BackGroundFlag = -5)
 | |
|             DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
 | |
|             DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
 | |
|         } else if (Info.count == 2) {
 | |
|             if (Info.grade == 1)(BackGroundFlag = -5)
 | |
|             DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
 | |
|             DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 - 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 999999, 0);
 | |
|             DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 + 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item2, Info.num2, Index, -20, -10);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     ItemInfoDrawS = null;
 | |
|     //绘制道具相信信息
 | |
|     ItemObject = null;
 | |
| 
 | |
|     //绘制道具带道具信息
 | |
|     function DrawItemEx(X, Y, Id, Count, Pid, Flag, Flag2) {
 | |
|         try {
 | |
|             if (Flag != 999999) {
 | |
|                 local PartyMasterIcon = RinDro_Fiendwar_Obj.MyRaidTeam.MembersList[Pid];
 | |
| 
 | |
|                 local XOffset = -77 + Flag;
 | |
|                 local YOffset = -31 + Flag2;
 | |
|                 sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
 | |
| 
 | |
|                 //绘制队长头像
 | |
|                 foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
 | |
|                     local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
 | |
|                     local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
 | |
|                     setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
 | |
|                     DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
 | |
|                     releaseClip(); //裁切结束
 | |
|                 }
 | |
|                 local DrawName = PartyMasterIcon.InfoObj.Name;
 | |
|                 //绘制名字
 | |
|                 L_sq_DrawCode(DrawName, X + XOffset + 100 - LenheartTextClass.GetStringLength(DrawName) / 2, Y + YOffset + 4, sq_RGBA(247, 214, 90, 250), 0, 1);
 | |
|             }
 | |
| 
 | |
|             if (Id != -1) {
 | |
|                 local Rarity = L_sq_RA(L_sq_GetItem(Id) + 0xF4);
 | |
|                 L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 5 + Rarity, X - 3, Y - 3);
 | |
|                 L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
 | |
|                 if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
 | |
|                     ItemInfoDrawS = {};
 | |
|                     ItemInfoDrawS.X <- X;
 | |
|                     ItemInfoDrawS.Y <- Y;
 | |
|                     ItemInfoDrawS.ItemId <- Id;
 | |
|                 }
 | |
|             }
 | |
|         } catch (exception) {
 | |
|             print(exception);
 | |
|         }
 | |
|     }
 | |
|     //绘制悬停
 | |
|     function DrawItemInfoF(obj) {
 | |
|         if (ItemInfoDrawS) {
 | |
|             if (!ItemObject) {
 | |
|                 local ItemId = ItemInfoDrawS.ItemId;
 | |
|                 if (AllItemInfoObject.rawin(ItemId)) {
 | |
|                     ItemObject = ItemInfoClass(AllItemInfoObject[ItemId]);
 | |
|                 }
 | |
|             }
 | |
|             ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength);
 | |
|         } else {
 | |
|             ItemObject = null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function DrawImg(Path, Index, XPos, YPos) {
 | |
|         L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
 | |
|     }
 | |
| 
 | |
|     function Show(obj) {
 | |
|         ItemInfoDrawS = null;
 | |
|         DrawMain(obj);
 | |
|         // DrawItemInfoF(obj);
 | |
|         LenheartNewUI_Windows.Show(obj);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //逻辑入口
 | |
|     function Proc(obj) {
 | |
|         LenheartNewUI_Windows.SyncPos(X, Y);
 | |
|     }
 | |
| 
 | |
| } |