Rindro-Sqr/Project/CumulativeReward/CumulativeReward.nut

284 lines
8.9 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
文件名:CumulativeReward.nut
路径:Project/CumulativeReward/CumulativeReward.nut
创建日期:2025-10-05 20:49
文件用途: 累计奖励
*/
class CumulativeRewardC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//下一奖励道具
NextRewardItem = 3037;
//当前阶段
CurrentStage = 1;
//当前阶段已过时间
CurrentStageTime = 0;
//下一阶段所需时间
NextStageTime = 0;
//总累计次数
TotalCount = null;
//当前累计次数
CurrentCount = 0;
//奖励道具信息(数组)
/*对象结构体
{
id = 3037,(编号)
count = 1,(数量)
state = 0,0未达到要求,1达到要求未领取,2已领取
}
*/
RewardItemInfo = null;
//领取按钮List
RewardButtonList = null;
//收包记录时间
RecvPackTime = 0;
//下方界面是否打开Flag
IsOpen = false;
Img1 = null;
//请求配置的Flag
RequestConfig = false;
//全部完成的Flag
AllFinish = false;
function CheckTimePack() {
SendPackEx({
op = 20097001,
});
}
function CheckConfigPack() {
SendPackEx({
op = 20097005,
});
}
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
RewardButtonList = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
//配置回包
RegisterPack(20097004, function(Chunk) {
local Jso = Json.Decode(Chunk);
this.X = Jso.X;
this.Y = Jso.Y;
TotalCount = Jso.TotalCount;
CurrentCount = Jso.currentCount;
RewardItemInfo = Jso.RewardItemInfo;
foreach(button in RewardButtonList) {
RemoveChild(button.ObjectId);
}
RewardButtonList = [];
foreach(pos, value in RewardItemInfo) {
local ButtonBuf = LenheartNewUI_BaseButton(12 + (pos % 4) * 52, 109 + (pos / 4) * 104, 28, 18, "interface2/event/chn_event_2018/180619_honey_time/main.img", 6);
ButtonBuf.Data = pos;
ButtonBuf.OnClickEx = function(button) {
if(button.State == 8)return;
SendPackEx({
op = 20097003,
id = button.Data
});
}.bindenv(this);
ButtonBuf.SetCallBackFunc(function(button) {
if (!IsOpen) button.Visible = false;
else button.Visible = true;
}.bindenv(this));
AddChild(ButtonBuf);
RewardButtonList.append(ButtonBuf);
if (value.start == 0 || value.start == 2) ButtonBuf.State = 8;
}
RequestConfig = false;
}.bindenv(this));
//时间回包
RegisterPack(20097002, function(Chunk) {
local Jso = Json.Decode(Chunk);
local Arr = Jso.info;
NextRewardItem = Arr[0];
CurrentStage = Arr[1];
if (CurrentStage >= 3) {
CurrentStage = 3;
AllFinish = true;
}
CurrentStageTime = Arr[2];
NextStageTime = Arr[3];
RecvPackTime = Clock();
}.bindenv(this));
CheckTimePack();
Img1 = Rindro_Image("interface2/event/chn_event_2018/180619_honey_time/main.img");
}
function RegisterWidget() {
}
//绘制主界面
function DrawMain(obj) {
//绘制进度条底槽
Img1.DrawPng(20, X + 33, Y + 20);
//计算百分比
if (RecvPackTime != 0) {
local TimePercentage = (CurrentStageTime.tofloat() + ((Clock() - RecvPackTime).tofloat())) / NextStageTime.tofloat();
if (TimePercentage > 1.0) {
TimePercentage = 1.0;
if (!RequestConfig && !AllFinish) {
CheckTimePack();
CheckConfigPack();
RequestConfig = true;
}
}
setClip(X + 36, Y + 24, X + 36 + (101.0 * TimePercentage).tointeger(), Y + 24 + 6); //开始裁切
//绘制进度条
Img1.DrawPng(21, X + 36, Y + 24);
releaseClip(); //裁切结束
}
//绘制下一奖励道具
DrawItemBase(X + 6, Y + 6, NextRewardItem, 1);
//绘制盖子
Img1.DrawPng(19, X, Y);
//绘制阶段文字
Img1.DrawExPng(25 + CurrentStage, X + 46, Y + 3, 0, sq_RGBA(255, 255, 255, 250), 0.85, 0.85);
if (IsOpen) {
if (CurrentStage != null) {
local StageText = "累计在线得好礼 (" + (CurrentStage + 1) + "/4 阶段)";
L_sq_DrawCode(StageText, X + 6, Y + 42, sq_RGBA(255, 177, 0, 255), 1, 1);
if (AllFinish) {
local Str = "今天的累计在线活动已完成!";
L_sq_DrawCode(Str, X + 6, Y + 61, sq_RGBA(150, 150, 150, 255), 1, 1);
}else{
local Second = ((NextStageTime - (CurrentStageTime + ((Clock() - RecvPackTime)))) / 1000);
local SecondStr = Second % 60;
local Minute = (Second - SecondStr) / 60;
local Str = "距离下一阶段还有 " + (Minute> 0 ? Minute.tostring() + " 分 " : "") + SecondStr.tostring() + " 秒";
L_sq_DrawCode(Str, X + 6, Y + 61, sq_RGBA(150, 150, 150, 255), 1, 1);
}
}
if (TotalCount) {
local IntroductionText = "满阶段在线" + TotalCount[TotalCount.len() - 1] + "次获得丰厚好礼!";
L_sq_DrawCode(IntroductionText, X + 6, Y + 146, sq_RGBA(255, 177, 0, 255), 1, 1);
local CurCount = "累计次数 [" + CurrentCount.tostring() + "/" + TotalCount[TotalCount.len() - 1].tostring() + "]";
L_sq_DrawCode(CurCount, X + 6, Y + 166, sq_RGBA(104, 213, 237, 255), 1, 1);
}
//绘制所有奖励道具
if (RewardItemInfo) {
foreach(pos, value in RewardItemInfo) {
DrawItemBase(X + 12 + (pos % 4) * 52, Y + 80 + (pos / 4) * 104, value.id, value.count);
}
}
}
}
EffectFlag = false;
EffectTime = 0;
function TopShow(obj) {
if (!IsOpen) return;
if (EffectTime == 0) EffectTime = Clock();
local A = 60;
if (!EffectFlag) {
A = sq_GetUniformVelocity(60, 255, Clock() - EffectTime, 600);
if (A >= 255) {
EffectFlag = true;
EffectTime = Clock();
}
} else {
A = sq_GetUniformVelocity(255, 60, Clock() - EffectTime, 600);
if (A <= 60) {
EffectFlag = false;
EffectTime = Clock();
}
}
//绘制完成
if (RewardItemInfo) {
foreach(pos, value in RewardItemInfo) {
if (value.start == 1) {
L_sq_SetDrawImgModel(2, 0);
Img1.DrawExPng(10, X + 4 + (pos % 4) * 52, Y + 102 + (pos / 4) * 104, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0);
L_sq_ReleaseDrawImgModel();
} else if (value.start == 2) Img1.DrawPng(24, X + 12 + (pos % 4) * 52, Y + 110 + (pos / 4) * 104);
}
}
}
function Show(obj) {
LenheartNewUI_Windows.Show(obj);
DrawMain(obj);
}
//鼠标事件回调
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) {
IsOpen = true;
} else {
IsOpen = false;
}
}
//心跳时间
HeartTime = 0;
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
if (IsOpen) {
Img1.DrawPng(18, X, Y + 38);
Width = 206
Height = 266;
} else {
Width = 144
Height = 40;
}
if (Clock() - HeartTime > 30000) {
CheckTimePack();
HeartTime = Clock();
}
}
}
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("CumulativeReward_Obj");
function Lenheart_CumulativeReward_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("CumulativeReward_Obj")) {
RootTab.rawset("CumulativeReward_Obj", true);
LenheartNewUI_CreateWindow(CumulativeRewardC, "累计奖励窗口", ((getroottable().Rindro_Scr_Width - 405) / 2).tointeger(), 64, 405, 372, 0);
}
}
getroottable()["LenheartFuncTab"].rawset("CumulativeRewardFuncN", Lenheart_CumulativeReward_Fun);