420 lines
13 KiB
Plaintext
420 lines
13 KiB
Plaintext
|
|
/*
|
|||
|
|
文件名:AradPass_Quest.nut
|
|||
|
|
路径:Project/AradPass/AradPass_Quest.nut
|
|||
|
|
创建日期:2024-08-18 22:57
|
|||
|
|
文件用途:战令任务页
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
class AradPass_Quest_ItemC extends LenheartNewUI_Windows {
|
|||
|
|
//调试模式
|
|||
|
|
// DeBugMode = true;
|
|||
|
|
|
|||
|
|
//不是窗口
|
|||
|
|
// NoWindow = true;
|
|||
|
|
|
|||
|
|
//是否可见
|
|||
|
|
Visible = false;
|
|||
|
|
|
|||
|
|
//信息
|
|||
|
|
Info = null;
|
|||
|
|
|
|||
|
|
//任务奖励
|
|||
|
|
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
|||
|
|
Childrens = [];
|
|||
|
|
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
|||
|
|
//注册控件
|
|||
|
|
RegisterWidget();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function ResetFocus() {
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function RegisterWidget() {
|
|||
|
|
//完成按钮
|
|||
|
|
local ActiveButton = LenheartNewUI_ButtonText(458, 3, 15, "完成");
|
|||
|
|
ActiveButton.OnClick = function() {
|
|||
|
|
Info.op <- 20059033;
|
|||
|
|
SendPackEx(Info);
|
|||
|
|
}.bindenv(this);
|
|||
|
|
ActiveButton.SetCallBackFunc(function(Button) {
|
|||
|
|
//判断是否完成
|
|||
|
|
if (Info.SuccessState) {
|
|||
|
|
Button.TextStr = "已完成";
|
|||
|
|
Button.State = 8;
|
|||
|
|
Button.SetTextOffset(0, 1);
|
|||
|
|
Button.SetTextColor(sq_RGBA(185, 148, 96, 150));
|
|||
|
|
} else {
|
|||
|
|
if (Info.NowSuccessCount >= Info.MaxSuccessCount) {
|
|||
|
|
Button.State = 0;
|
|||
|
|
} else Button.State = 8;
|
|||
|
|
Button.TextStr = "完 成";
|
|||
|
|
Button.SetTextOffset(3, 1);
|
|||
|
|
Button.SetTextColor(sq_RGBA(185, 148, 96, 255));
|
|||
|
|
}
|
|||
|
|
}.bindenv(this))
|
|||
|
|
AddChild(ActiveButton);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//绘制主界面
|
|||
|
|
function DrawMain(obj) {
|
|||
|
|
if (!Info) return;
|
|||
|
|
local Ala = 250;
|
|||
|
|
if (Info.SuccessState) Ala = 150;
|
|||
|
|
//绘制任务名字
|
|||
|
|
L_sq_DrawCode(Info.QuestExplain, X + 20, Y + 8, sq_RGBA(179, 169, 135, Ala), 1, 1);
|
|||
|
|
//绘制完成次数
|
|||
|
|
local SuccessStr = Info.NowSuccessCount + " / " + Info.MaxSuccessCount;
|
|||
|
|
L_sq_DrawCode(SuccessStr, X + 296 - LenheartTextClass.GetStringLength(SuccessStr) / 2, Y + 8, sq_RGBA(179, 169, 135, Ala), 1, 1);
|
|||
|
|
//绘制经验值
|
|||
|
|
L_sq_DrawCode(Info.Experience.tostring(), X + 394 - LenheartTextClass.GetStringLength(Info.Experience.tostring()) / 2, Y + 8, sq_RGBA(179, 169, 135, Ala), 1, 1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function Show(obj) {
|
|||
|
|
DrawMain(obj);
|
|||
|
|
//动态设置这里要先刷新一下坐标
|
|||
|
|
LenheartNewUI_Windows.SyncPos(X, Y)
|
|||
|
|
LenheartNewUI_Windows.Show(obj);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//逻辑入口
|
|||
|
|
function Proc(obj) {
|
|||
|
|
LenheartNewUI_Windows.SyncPos(X, Y);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AradPass_QuestC extends LenheartNewUI_Windows {
|
|||
|
|
//调试模式
|
|||
|
|
// DeBugMode = true;
|
|||
|
|
|
|||
|
|
//不是窗口
|
|||
|
|
// NoWindow = true;
|
|||
|
|
|
|||
|
|
//是否可见
|
|||
|
|
Visible = false;
|
|||
|
|
|
|||
|
|
QuestTitle = null;
|
|||
|
|
|
|||
|
|
//页面
|
|||
|
|
Page = 0;
|
|||
|
|
|
|||
|
|
//任务集合
|
|||
|
|
QuestItemList = null;
|
|||
|
|
|
|||
|
|
//每日任务数组
|
|||
|
|
DailyTasks = null;
|
|||
|
|
//重复任务数组
|
|||
|
|
RepeatingTasks = null;
|
|||
|
|
//赛季任务数组
|
|||
|
|
SeasonTasks = null;
|
|||
|
|
//任务完成提示
|
|||
|
|
QuestSuccessTips = null;
|
|||
|
|
|
|||
|
|
QuestTips = false;
|
|||
|
|
QuestWheelNow = 0;
|
|||
|
|
QuestWheelMax = 0;
|
|||
|
|
|
|||
|
|
ExpLimitMax = 0;
|
|||
|
|
ExpLimit = 0;
|
|||
|
|
|
|||
|
|
function GetPlayerQuest() {
|
|||
|
|
local T = {
|
|||
|
|
op = 20059031
|
|||
|
|
}
|
|||
|
|
SendPackEx(T);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function GetPlayerQuestCallBack(Chunk) {
|
|||
|
|
local Jso = Json.Decode(Chunk);
|
|||
|
|
DailyTasks = Jso.task[0];
|
|||
|
|
RepeatingTasks = Jso.task[1];
|
|||
|
|
SeasonTasks = Jso.task[2];
|
|||
|
|
ExpLimitMax = Jso.ExpLimitMax;
|
|||
|
|
ExpLimit = Jso.ExpLimit;
|
|||
|
|
|
|||
|
|
QuestSuccessTips = [0, 0, 0];
|
|||
|
|
if (Parent) Parent.TabSuccessTips[1] = 0;
|
|||
|
|
|
|||
|
|
foreach(Pos, Value in Jso.task) {
|
|||
|
|
foreach(QuestObject in Value) {
|
|||
|
|
if (QuestObject.SuccessState == 0) {
|
|||
|
|
if (QuestObject.NowSuccessCount >= QuestObject.MaxSuccessCount) {
|
|||
|
|
QuestSuccessTips[Pos] = 1;
|
|||
|
|
Parent.TabSuccessTips[1] = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
InitQuestItem();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
|||
|
|
Childrens = [];
|
|||
|
|
QuestTitle = [];
|
|||
|
|
QuestItemList = [
|
|||
|
|
[],
|
|||
|
|
[],
|
|||
|
|
[]
|
|||
|
|
];
|
|||
|
|
//注册控件
|
|||
|
|
RegisterWidget();
|
|||
|
|
|
|||
|
|
Pack_Control.rawset(20059032, GetPlayerQuestCallBack.bindenv(this));
|
|||
|
|
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//因为要重载LenheartNewUI_Windows的构造函数
|
|||
|
|
function ResetFocus() {
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function ChangePage(ToPage) {
|
|||
|
|
//如果就是当前页面直接返回
|
|||
|
|
// if (ToPage == Page) return;
|
|||
|
|
foreach(ButtonObj in QuestTitle) {
|
|||
|
|
ButtonObj.State = 0;
|
|||
|
|
}
|
|||
|
|
Page = ToPage;
|
|||
|
|
QuestTitle[ToPage].State = 1;
|
|||
|
|
|
|||
|
|
//先移除所有
|
|||
|
|
for (local i = 0; i< 3; i++) {
|
|||
|
|
foreach(winobj in QuestItemList[i]) {
|
|||
|
|
winobj.Visible = false;
|
|||
|
|
RemoveChild(winobj.ObjectId);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//添加该页应该显示的
|
|||
|
|
for (local i = 0; i< 3; i++) {
|
|||
|
|
if (i == ToPage) {
|
|||
|
|
foreach(winobj in QuestItemList[ToPage]) {
|
|||
|
|
winobj.Visible = true;
|
|||
|
|
AddChild(winobj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设定页面滚轮阈值
|
|||
|
|
{
|
|||
|
|
local QuestTasks = null;
|
|||
|
|
//每日
|
|||
|
|
if (Page == 0) {
|
|||
|
|
//每日任务数组
|
|||
|
|
QuestTasks = DailyTasks;
|
|||
|
|
}
|
|||
|
|
//重复
|
|||
|
|
else if (Page == 1) {
|
|||
|
|
//重复任务数组
|
|||
|
|
QuestTasks = RepeatingTasks;
|
|||
|
|
}
|
|||
|
|
//赛季
|
|||
|
|
else {
|
|||
|
|
//赛季任务数组
|
|||
|
|
QuestTasks = SeasonTasks;
|
|||
|
|
}
|
|||
|
|
QuestWheelMax = QuestTasks.len();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
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);
|
|||
|
|
|
|||
|
|
local Tabbars1 = LenheartNewUI_TabbarsText(12, 213, "每日任务");
|
|||
|
|
Tabbars1.State = 1;
|
|||
|
|
Tabbars1.SetTextOffset(9, 3);
|
|||
|
|
AddChild(Tabbars1);
|
|||
|
|
Tabbars1.OnClick = function() {
|
|||
|
|
ChangePage(0);
|
|||
|
|
}.bindenv(this);
|
|||
|
|
QuestTitle.append(Tabbars1);
|
|||
|
|
|
|||
|
|
local Tabbars2 = LenheartNewUI_TabbarsText(74, 213, "重复任务");
|
|||
|
|
AddChild(Tabbars2);
|
|||
|
|
Tabbars2.SetTextOffset(9, 3);
|
|||
|
|
Tabbars2.OnClick = function() {
|
|||
|
|
ChangePage(1);
|
|||
|
|
}.bindenv(this);
|
|||
|
|
QuestTitle.append(Tabbars2);
|
|||
|
|
|
|||
|
|
local Tabbars3 = LenheartNewUI_TabbarsText(136, 213, "赛季任务");
|
|||
|
|
AddChild(Tabbars3);
|
|||
|
|
Tabbars3.SetTextOffset(9, 3);
|
|||
|
|
Tabbars3.OnClick = function() {
|
|||
|
|
ChangePage(2);
|
|||
|
|
}.bindenv(this);
|
|||
|
|
QuestTitle.append(Tabbars3);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//全部领取按钮
|
|||
|
|
local ClaimAllButton = LenheartNewUI_ButtonText(472, 452, 15, "全部领取");
|
|||
|
|
ClaimAllButton.SetFrame(null, 323);
|
|||
|
|
ClaimAllButton.SetTextOffset(-7, 1);
|
|||
|
|
ClaimAllButton.OnClick = function() {
|
|||
|
|
local T = {
|
|||
|
|
op = 20059035
|
|||
|
|
}
|
|||
|
|
SendPackEx(T);
|
|||
|
|
}.bindenv(this);
|
|||
|
|
AddChild(ClaimAllButton);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function OpenCallBack() {
|
|||
|
|
GetPlayerQuest();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//创建任务Item
|
|||
|
|
function InitQuestItem() {
|
|||
|
|
//清除原有项目
|
|||
|
|
foreach(ItemList in QuestItemList) {
|
|||
|
|
foreach(Window in ItemList) {
|
|||
|
|
RemoveChild(Window.ObjectId);
|
|||
|
|
Window.DestroyWindow();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//先移除所有
|
|||
|
|
for (local i = 0; i< 3; i++) {
|
|||
|
|
foreach(winobj in QuestItemList[i]) {
|
|||
|
|
winobj.Visible = false;
|
|||
|
|
RemoveChild(winobj.ObjectId);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//清空缓存
|
|||
|
|
QuestItemList = [
|
|||
|
|
[],
|
|||
|
|
[],
|
|||
|
|
[]
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
for (local i = 0; i< 3; i++) {
|
|||
|
|
local QuestTasks = null;
|
|||
|
|
//每日
|
|||
|
|
if (i == 0) {
|
|||
|
|
//每日任务数组
|
|||
|
|
QuestTasks = DailyTasks;
|
|||
|
|
}
|
|||
|
|
//重复
|
|||
|
|
else if (i == 1) {
|
|||
|
|
//重复任务数组
|
|||
|
|
QuestTasks = RepeatingTasks;
|
|||
|
|
}
|
|||
|
|
//赛季
|
|||
|
|
else {
|
|||
|
|
//赛季任务数组
|
|||
|
|
QuestTasks = SeasonTasks;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach(Pos, Value in QuestTasks) {
|
|||
|
|
local QuestItem = AradPass_Quest_ItemC("AradPassQuestItem_" + i + "_" + Pos, X - 5000, Y, 536, 31, 0);
|
|||
|
|
QuestItem.Info = Value;
|
|||
|
|
QuestItemList[i].append(QuestItem);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ChangePage(Page);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//绘制主界面
|
|||
|
|
function DrawMain(obj) {
|
|||
|
|
L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 43, X + 11, Y - 210 + 50 + 162);
|
|||
|
|
L_sq_DrawImg("interface2/ui/aradpass/chn/aradpass.img", 38, X + 13, Y - 210 + 50 + 184);
|
|||
|
|
|
|||
|
|
L_sq_DrawCode("任务内容", X + 120, Y + 7 + 21, sq_RGBA(179, 169, 135, 255), 1, 1);
|
|||
|
|
L_sq_DrawCode("完成次数", X + 288, Y + 7 + 21, sq_RGBA(179, 169, 135, 255), 1, 1);
|
|||
|
|
L_sq_DrawCode("经验值", X + 388, Y + 7 + 21, sq_RGBA(179, 169, 135, 255), 1, 1);
|
|||
|
|
L_sq_DrawCode("状态", X + 492, Y + 7 + 21, sq_RGBA(179, 169, 135, 255), 1, 1);
|
|||
|
|
|
|||
|
|
//绘制悬停提示
|
|||
|
|
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 25, Y - 210 + 456, 16, 16)) {
|
|||
|
|
L_sq_DrawImg("interface/lenheartwindowcommon.img", 240, X + 25, Y - 210 + 456);
|
|||
|
|
QuestTips = true;
|
|||
|
|
} else {
|
|||
|
|
L_sq_DrawImg("interface/lenheartwindowcommon.img", 239, X + 25, Y - 210 + 456);
|
|||
|
|
QuestTips = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 周获取的经验
|
|||
|
|
L_sq_DrawCode("每周重复任务经验获取上限 " + ExpLimit + "/" + ExpLimitMax, X + 40 + 7, Y - 210 + 7 + 451, sq_RGBA(179, 169, 135, 255), 1, 1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//上层绘制
|
|||
|
|
function DrawTop(obj) {
|
|||
|
|
//绘制标签栏的感叹号
|
|||
|
|
foreach(Pos, Value in QuestTitle) {
|
|||
|
|
if (QuestSuccessTips && QuestSuccessTips.len() == 3) {
|
|||
|
|
if (QuestSuccessTips[Pos] == 1) {
|
|||
|
|
L_sq_DrawImg("interface/Lenheartwindowcommon.img", 301, X + 64 + (Pos * 62), Y + 6, 0, sq_RGBA(255, 255, 255, 210), 0.8, 0.8);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//任务提示
|
|||
|
|
if (QuestTips) {
|
|||
|
|
L_sq_DrawWindow(X + 40, Y - 210 + 350, 224, 100, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
|||
|
|
local QuestTipsStr = "每周可以通过完成重复任务获得的最大经验值。\n达到每周经验获取上限后,无法进行重复任务。\n通过每日任务以及赛季任务获得的经验值,不受每周经验获取上限的限制。\n每周星期四将初始化每周经验获取量。\n每周四凌晨6点初始化重复任务的进度,并删除未领取的重复任务经验值。";
|
|||
|
|
local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251);
|
|||
|
|
foreach(Pos, va in QuestTipsArray) {
|
|||
|
|
// Sout("文本内容嗯: %L", va);
|
|||
|
|
L_sq_DrawCode(va, X + 40 + 7, Y - 210 + 7 + 350 + (Pos * 16), 0xFFFFFFFF, 1, 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function Show(obj) {
|
|||
|
|
DrawMain(obj);
|
|||
|
|
LenheartNewUI_Windows.Show(obj);
|
|||
|
|
|
|||
|
|
|
|||
|
|
DrawTop(obj);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//逻辑入口
|
|||
|
|
function Proc(obj) {
|
|||
|
|
LenheartNewUI_Windows.SyncPos(X, Y - 210);
|
|||
|
|
|
|||
|
|
if (Parent && Parent.Visible && Parent.PageSelectM == 1) {
|
|||
|
|
Visible = true;
|
|||
|
|
X = Parent.X;
|
|||
|
|
Y = Parent.Y + 210;
|
|||
|
|
} else {
|
|||
|
|
Visible = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (IMouse.IsWheelUp()) {
|
|||
|
|
if (QuestWheelNow > 0) QuestWheelNow--;
|
|||
|
|
}
|
|||
|
|
if (IMouse.IsWheelDown()) {
|
|||
|
|
if (QuestWheelNow< QuestWheelMax - 6) QuestWheelNow++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach(Pos, winobj in QuestItemList[Page]) {
|
|||
|
|
if (Pos >= QuestWheelNow && Pos <= QuestWheelNow + 5) {
|
|||
|
|
local OffsetPos = Pos - QuestWheelNow;
|
|||
|
|
winobj.X = X + 12;
|
|||
|
|
winobj.Y = Y - 210 + 50 + 184 + 25 + (OffsetPos * 31);
|
|||
|
|
} else {
|
|||
|
|
winobj.X = X + 12 - 5000;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//主动调用子对象窗口的Proc
|
|||
|
|
foreach(Object in Childrens) {
|
|||
|
|
if (Object instanceof LenheartNewUI_Windows)
|
|||
|
|
Object.Proc(obj);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
// getroottable().rawdelete("AradPass_Obj");
|