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);
|
||
|
|
}
|
||
|
|
}
|