431 lines
13 KiB
Plaintext
431 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) 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;
|
||
if (Parent && Parent.TabSuccessTips)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);
|
||
}
|
||
|
||
//override
|
||
//鼠标滚轮事件回调
|
||
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
|
||
|
||
|
||
if (Flag) {
|
||
if (QuestWheelNow > 0) QuestWheelNow--;
|
||
}
|
||
if (!Flag) {
|
||
if (QuestWheelNow< QuestWheelMax - 6) QuestWheelNow++;
|
||
}
|
||
|
||
|
||
//调用原生方法
|
||
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
|
||
}
|
||
|
||
//逻辑入口
|
||
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;
|
||
}
|
||
|
||
|
||
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"); |