406 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			406 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:FiendwarHall.nut
 | |
| 路径:Plugins/Fiendwar/FiendwarHall.nut
 | |
| 创建日期:2024-03-11	12:54
 | |
| 文件用途:超时空之战大厅
 | |
| */
 | |
| class FiendwarHallC extends LenheartNewUI_Windows {
 | |
| 
 | |
|     // DeBugMode = true;
 | |
| 
 | |
|     WindowObj = null; //窗口对象
 | |
|     MainState = false; //主状态
 | |
|     X = 320;
 | |
|     Y = 40;
 | |
|     //默认显示状态需要是关闭 因为要通过按钮打开
 | |
|     Visible = false;
 | |
|     //攻坚队List
 | |
|     PartyList = null;
 | |
| 
 | |
| 
 | |
|     function GetInstance() {
 | |
|         return getroottable()["FiendwarHallCObj"];
 | |
|     }
 | |
| 
 | |
|     //获取所有队伍回调包
 | |
|     function GetAllTeamCallBack(Chunk) {
 | |
|         local Jso = Json.Decode(Chunk);
 | |
|         //清除原来的List PartyList可以直接清除  但是Childrens中的窗口需要调用底层方法清除队伍类
 | |
|         PartyList = [];
 | |
|         // this.RemoveChilds(FiendwarHallPartyC);
 | |
|         //遍历包构造攻坚队UI对象
 | |
|         foreach(TeamsSimple in Jso.TeamSimList) {
 | |
|             local T = {
 | |
|                 TeamId = TeamsSimple.TeamId.tostring(),
 | |
|                 TeamName = TeamsSimple.TeamName,
 | |
|                 TeamPlayerCount = TeamsSimple.TeamPlayerCount,
 | |
|                 State = TeamsSimple.State
 | |
|             }
 | |
|             local TeamBuf = FiendwarHallPartyC(T);
 | |
|             AddChild(TeamBuf);
 | |
|             PartyList.append(TeamBuf);
 | |
|         }
 | |
|         //收到刷新队伍列表包时需要将队伍窗口关闭
 | |
|         if ("Close" in Jso) LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
 | |
|         // RemoveChilds(FiendwarHallPartyC, false);
 | |
|     }
 | |
| 
 | |
|     //获取攻坚队信息回调
 | |
|     function GetTeamInfoCallBack(Chunk) {
 | |
|         // Sout("收到包 : \n %L", Chunk);
 | |
| 
 | |
|         local Jso = Json.Decode(Chunk);
 | |
|         LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
 | |
|         local Win = LenheartNewUI_CreateWindow(FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
 | |
|         FiendwarTotal.GetInstance().MyTeam = Win;
 | |
|         Win.Visible = false;
 | |
| 
 | |
|         if (!("Close" in Jso)) {
 | |
|             //开启队伍窗口显示
 | |
|             Win.Visible = true;
 | |
|             //设置置顶
 | |
|             Win.ResetFocus();
 | |
|         }
 | |
|         //清空成员对象集合
 | |
|         Win.MembersList = [];
 | |
|         //清空是否为我的队伍状态
 | |
|         Win.IsMyTeam = false;
 | |
|         //清空是否为队长状态
 | |
|         Win.IsCaptain = false;
 | |
|         //赋值队伍名称
 | |
|         Win.TeamName = Jso.team.TeamName;
 | |
|         //赋值队伍ID
 | |
|         Win.TeamID = Jso.team.TeamId;
 | |
|         //遍历Team包 用于构造队伍窗口中的每一位成员
 | |
|         foreach(_index, MemberObj in Jso.team.characNum) {
 | |
|             //说明我在这个攻坚队里
 | |
|             if (Jso.cid == MemberObj.CID) {
 | |
|                 Win.IsMyTeam = true;
 | |
| 
 | |
|                 local Fo = FiendwarTotal.GetInstance();
 | |
|                 //向全局类存入我的攻坚队伍ID
 | |
|                 Fo.MyPartyId = Jso.team.TeamId;
 | |
|                 //存入我的CID
 | |
|                 Fo.MyCid = Jso.cid;
 | |
|                 //说明是队长
 | |
|                 if (Jso.cid == Jso.team.captainCid) {
 | |
|                     Win.IsCaptain = true;
 | |
|                     //存入我是攻坚队队长
 | |
|                     Fo.IsCaptain = true;
 | |
|                 }
 | |
|             }
 | |
|             local T = {
 | |
|                 PartyId = Jso.team.TeamId, //攻坚队ID
 | |
|                 TeamId = MemberObj.characNum + 1, //小队编号
 | |
|                 Level = MemberObj.PlayerLevel.tostring(), //等级
 | |
|                 Name = MemberObj.PlayerName, //名字
 | |
|                 JobName = MemberObj.PlayerGrowTypeJob, //职业名
 | |
|                 Job = MemberObj.PlayerJob, //职业编号
 | |
|                 StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
 | |
|                 EquVos = MemberObj.equVos, //装备List 用于显示头像
 | |
|                 Captain = MemberObj.CaptainBool, //是否为攻坚队队长
 | |
|                 Cid = MemberObj.CID, //Cid
 | |
|                 OnlineState = MemberObj.onLineStart, //在线状态
 | |
|                 ExitTime = MemberObj.exitTime, //离队时间
 | |
|                 PlayerSession = MemberObj.PlayerSession, //玩家在世界中的Session 用于进行原生用户操作
 | |
|                 ClearanceCount = MemberObj.ClearanceCount, //通关次数
 | |
|                 ClearanceCountMax = Jso.ClearanceCountMax, //总通关次数
 | |
|             }
 | |
|             //通过类构造并添加队伍成员UI对象
 | |
|             local TeamBuf = FiendwarPartyInfoMemberC(T);
 | |
|             Win.AddChild(TeamBuf);
 | |
|             Win.MembersList.append(TeamBuf);
 | |
|         }
 | |
| 
 | |
|         //刷新界面
 | |
|         Win.RegisterWidget();
 | |
|         //刷新自己的界面
 | |
|         RegisterWidget();
 | |
|     }
 | |
|     //获取所有队伍
 | |
|     function GetAllTeamCall() {
 | |
|         local Jso = {
 | |
|             op = 20063011
 | |
|         }
 | |
|         SendPack(Jso);
 | |
|     }
 | |
|     //退出队伍回调
 | |
|     function ExitPartyCallBack(Chunk) {
 | |
|         LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
 | |
|         FiendwarTotal.GetInstance().ClearInfo();
 | |
| 
 | |
|         local Win = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
 | |
|         Win.CloseWindow();
 | |
|         RegisterWidget();
 | |
|     }
 | |
| 
 | |
|     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
 | |
|         Childrens = [];
 | |
|         PartyList = [];
 | |
| 
 | |
|         //注册控件
 | |
|         RegisterWidget();
 | |
|         //注册回调包
 | |
|         Pack_Control.rawset(20063002, GetAllTeamCallBack.bindenv(this));
 | |
|         Pack_Control.rawset(20063004, GetTeamInfoCallBack.bindenv(this));
 | |
|         Pack_Control.rawset(20063008, ExitPartyCallBack.bindenv(this));
 | |
| 
 | |
|         GetAllTeamCall();
 | |
| 
 | |
|         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
 | |
|     }
 | |
| 
 | |
|     OnlyPreparingBtn = null;
 | |
|     OnlyPreparingFlag = 1;
 | |
|     InputObject = null;
 | |
| 
 | |
|     function RegisterWidget() {
 | |
|         RemoveChilds(FiendwarHallPartyC, false);
 | |
|         //关闭按钮
 | |
|         local CloseButton = LenheartNewUI_BaseButton(457, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
 | |
|         CloseButton.OnClick = function() {
 | |
|             CloseWindow();
 | |
|         }.bindenv(this);
 | |
|         AddChild(CloseButton);
 | |
| 
 | |
|         //我的频道复选框
 | |
|         local MyChannelBtn = LenheartNewUI_SwitchButtonText(16, 30, "我的频道");
 | |
|         MyChannelBtn.State = 1;
 | |
|         MyChannelBtn.ImgIndex = 358;
 | |
|         MyChannelBtn.SetTextPos(12, 2);
 | |
|         MyChannelBtn.Width = 76;
 | |
|         MyChannelBtn.Height = 16;
 | |
|         AddChild(MyChannelBtn);
 | |
| 
 | |
|         //只查看招募中的攻坚队
 | |
|         OnlyPreparingBtn = LenheartNewUI_SwitchButtonText(110, 30, "只查看招募中的攻坚队");
 | |
|         OnlyPreparingBtn.ImgIndex = 358;
 | |
|         OnlyPreparingBtn.SetTextPos(12, 2);
 | |
|         OnlyPreparingBtn.Width = 76;
 | |
|         OnlyPreparingBtn.Height = 16;
 | |
|         OnlyPreparingBtn.OnClick = function() {
 | |
|             switch (OnlyPreparingFlag) {
 | |
|                 case 0:
 | |
|                     OnlyPreparingFlag = 1;
 | |
|                     break;
 | |
|                 case 1:
 | |
|                     OnlyPreparingFlag = 0;
 | |
|                     break;
 | |
|             }
 | |
|             OnlyPreparingBtn.State = OnlyPreparingFlag;
 | |
|         }.bindenv(this);
 | |
|         AddChild(OnlyPreparingBtn);
 | |
| 
 | |
|         //搜索队伍输入框
 | |
|         InputObject = LenheartNewUI_BaseInput(260, 31, 80, 20);
 | |
|         AddChild(InputObject);
 | |
| 
 | |
|         //搜索按钮
 | |
|         local FindButton = LenheartNewUI_ButtonText(348, 28, 5, "搜索");
 | |
|         FindButton.SetTextOffset(0, 1);
 | |
|         FindButton.OnClick = function() {
 | |
|             if (InputObject.str.len() > 0) {
 | |
| 
 | |
|             }
 | |
|         }.bindenv(this);
 | |
|         AddChild(FindButton);
 | |
| 
 | |
|         //重置按钮
 | |
|         local ResetButton = LenheartNewUI_ButtonText(408, 28, 5, "重置");
 | |
|         ResetButton.SetTextOffset(0, 1);
 | |
|         ResetButton.OnClick = function() {
 | |
|             InputObject.str = "";
 | |
|         }.bindenv(this);
 | |
|         AddChild(ResetButton);
 | |
| 
 | |
|         //编号按钮
 | |
|         local ModelButton = LenheartNewUI_ButtonText(9, 56, -18, "编号");
 | |
|         ModelButton.Idx = 163;
 | |
|         ModelButton.DWidth = -8;
 | |
|         ModelButton.SetTextOffset(-9, 1);
 | |
|         AddChild(ModelButton);
 | |
| 
 | |
|         //状态按钮
 | |
|         local StateButton = LenheartNewUI_ButtonText(51, 56, -18, "状态");
 | |
|         StateButton.Idx = 163;
 | |
|         StateButton.DWidth = -8;
 | |
|         StateButton.SetTextOffset(-9, 1);
 | |
|         AddChild(StateButton);
 | |
| 
 | |
|         //频道按钮
 | |
|         local ChannelButton = LenheartNewUI_ButtonText(93, 56, -18, "频道");
 | |
|         ChannelButton.Idx = 163;
 | |
|         ChannelButton.DWidth = -8;
 | |
|         ChannelButton.SetTextOffset(-9, 1);
 | |
|         AddChild(ChannelButton);
 | |
| 
 | |
|         //攻坚队名称按钮
 | |
|         local PartyNameButton = LenheartNewUI_ButtonText(135, 56, 100, "攻坚队名称");
 | |
|         PartyNameButton.Idx = 163;
 | |
|         PartyNameButton.DWidth = 223;
 | |
|         PartyNameButton.FillWidth = 1;
 | |
|         PartyNameButton.FirstWidth = 21;
 | |
|         PartyNameButton.SetTextOffset(26, 1);
 | |
|         AddChild(PartyNameButton);
 | |
| 
 | |
|         //阶段按钮
 | |
|         local StageButton = LenheartNewUI_ButtonText(289, 56, 52, "阶段");
 | |
|         StageButton.Idx = 163;
 | |
|         StageButton.DWidth = 140;
 | |
|         StageButton.FillWidth = 1;
 | |
|         StageButton.FirstWidth = 21;
 | |
|         StageButton.SetTextOffset(26, 1);
 | |
|         AddChild(StageButton);
 | |
| 
 | |
|         //队员数量按钮
 | |
|         local TeammembersButton = LenheartNewUI_ButtonText(402, 56, 50, "队员数量");
 | |
|         TeammembersButton.Idx = 163;
 | |
|         TeammembersButton.FillWidth = 1;
 | |
|         TeammembersButton.FirstWidth = 21;
 | |
|         TeammembersButton.DWidth = 47;
 | |
|         TeammembersButton.SetTextOffset(-8, 1);
 | |
|         AddChild(TeammembersButton);
 | |
| 
 | |
|         //创建攻坚队按钮
 | |
|         local CreateOrMyPartyStr = "创建攻坚队";
 | |
|         if (FiendwarTotal.GetInstance().MyPartyId) CreateOrMyPartyStr = "我的攻坚队";
 | |
|         local MyPartyButton = LenheartNewUI_ButtonText(15, 395, 30, CreateOrMyPartyStr);
 | |
|         MyPartyButton.SetTextOffset(-6, 1);
 | |
|         MyPartyButton.OnClick = function() {
 | |
|             if (FiendwarTotal.GetInstance().MyPartyId) {
 | |
|                 //发送查看攻坚队具体信息包
 | |
|                 local T = {
 | |
|                     op = 20063013,
 | |
|                     teamsId = FiendwarTotal.GetInstance().MyPartyId
 | |
|                 }
 | |
|                 Rindro_BaseToolClass.SendPackEx(T);
 | |
|             } else {
 | |
|                 local Win = LenheartNewUI_CreateWindow(FiendwarHallCreatePartyC, "超时空创建队伍窗口", 290, 220, 284, 154, 18);
 | |
|                 Win.Visible = true;
 | |
|                 Win.ResetFocus();
 | |
|             }
 | |
|         }.bindenv(this);
 | |
|         AddChild(MyPartyButton);
 | |
| 
 | |
|         //左翻页按钮
 | |
|         local LeftButton = LenheartNewUI_BaseButton(160, 400, 15, 15, "interface/lenheartwindowcommon.img", 34);
 | |
|         LeftButton.OnClick = function() {
 | |
|             if (Page > 0) Page--;
 | |
|         }.bindenv(this);
 | |
|         AddChild(LeftButton);
 | |
| 
 | |
|         //右翻页按钮
 | |
|         local RightButton = LenheartNewUI_BaseButton(220, 400, 15, 15, "interface/lenheartwindowcommon.img", 38);
 | |
|         RightButton.OnClick = function() {
 | |
|             if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
 | |
|         }.bindenv(this);
 | |
|         AddChild(RightButton);
 | |
| 
 | |
|         //进入待机按钮
 | |
|         local FQButton = LenheartNewUI_ButtonText(300, 394, 20, "进入待机");
 | |
|         FQButton.SetTextOffset(-5, 2);
 | |
|         FQButton.State = 8;
 | |
|         AddChild(FQButton);
 | |
| 
 | |
|         //刷新按钮
 | |
|         local RefreshButton = LenheartNewUI_BaseButton(410, 395, 25, 25, "interface/lenheartwindowcommon.img", 366);
 | |
|         RefreshButton.OnClick = function() {
 | |
|             GetAllTeamCall();
 | |
|         }.bindenv(this);
 | |
|         AddChild(RefreshButton);
 | |
| 
 | |
|         //设置按钮
 | |
|         local SettingButton = LenheartNewUI_BaseButton(440, 394, 15, 15, "interface/lenheartwindowcommon.img", 362);
 | |
|         SettingButton.State = 8;
 | |
|         AddChild(SettingButton);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     function DrawMainBackGround(obj) {
 | |
|         //Item信息框一般为211的宽度
 | |
|         L_sq_DrawWindow(X, Y + 10, 540 * 0.85, 420 * 0.9, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
 | |
| 
 | |
|         L_sq_DrawWindow(X + 6, Y + 19, 528 * 0.85, 47, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
 | |
| 
 | |
|         //绘制背景框标题栏
 | |
|         L_sq_DrawImg("hud/fiendwarl.img", 3, X + 1, Y);
 | |
| 
 | |
|         L_sq_DrawCode("寻找攻坚队", X + 217, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
 | |
| 
 | |
|         //绘制队伍List
 | |
|         DrawPartyList(obj);
 | |
| 
 | |
|         L_sq_DrawWindow(X + 6, Y + 382, 528 * 0.85, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
 | |
| 
 | |
|         //计算页数
 | |
|         local PageStr = Page + 1 + " / " + ((PartyList.len() / PageMaxCount) + 1);
 | |
|         //绘制当前页数
 | |
|         L_sq_DrawCode(PageStr, X + 166 + LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     Page = 0;
 | |
|     PageMaxCount = 13;
 | |
|     //绘制队伍信息
 | |
|     function DrawPartyList(obj) {
 | |
|         if (PartyList.len() <= 0) return;
 | |
|         //先遍历一遍全部挪走
 | |
|         foreach(Index, TeamObj in PartyList) {
 | |
|             TeamObj.SyncPos(9999, 9999);
 | |
|         }
 | |
|         //在遍历需要显示的同步坐标
 | |
|         foreach(Index, TeamObj in PartyList.slice((((Page) * PageMaxCount) > 0) ? ((Page) * PageMaxCount) : 0, ((Page + 1) * PageMaxCount) > PartyList.len() ? PartyList.len() : ((Page + 1) * PageMaxCount))) {
 | |
|             TeamObj.SyncPos(X, Y + 2 + (Index % PageMaxCount) * 23);
 | |
|             // TeamObj.Show();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //绘制主界面
 | |
|     function DrawMain(obj) {
 | |
|         DrawMainBackGround(obj);
 | |
|     }
 | |
| 
 | |
|     //绘制入口
 | |
|     function Show(obj) {
 | |
|         DrawMain(obj);
 | |
|         LenheartNewUI_Windows.Show(obj);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     MainButton = null;
 | |
|     //逻辑入口
 | |
|     function Proc(obj) {
 | |
|         //界面未打开
 | |
|         if (!this.Visible && L_sq_RA(0x1A5FB4C, "0x14+0x28+")< 2) {
 | |
|             //在甲板
 | |
|             if (FiendwarTotal.GetInstance().BaseConfig && FiendwarTotal.GetInstance().BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == FiendwarTotal.GetInstance().BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
 | |
|                 local PaW = sq_GetPopupWindowMainCotrol(6);
 | |
|                 if (PaW) {
 | |
|                     L_sq_UseSkill(DIK_ESCAPE);
 | |
|                     this.Visible = true;
 | |
|                     GetAllTeamCall();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         LenheartNewUI_Windows.SyncPos(X, Y);
 | |
|     }
 | |
| 
 | |
|     //鼠标滚轮时间回调
 | |
|     function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
 | |
| 
 | |
|         switch (Flag) {
 | |
|             //下
 | |
|             case 0: {
 | |
|                 if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
 | |
|                 break;
 | |
|             }
 | |
|             //上
 | |
|             case 1: {
 | |
|                 if (Page > 0) Page--;
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|         LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
 | |
|     }
 | |
| } |