Rindro-Sqr/Project/OnilneSign/OnilneSign.nut

300 lines
9.4 KiB
Plaintext

/*
文件名:OnilneSign.nut
路径:Project/OnilneSign/OnilneSign.nut
创建日期:2024-08-10 13:27
文件用途:在线签到
*/
class OnilneSignC_ButtonText extends LenheartNewUI_Button {
TextStr = null;
TextX = null;
TextY = null;
TextColor = null;
TextRColor = null;
TextXoffset = null;
TextYoffset = null;
Id = null;
constructor(X, Y, W, Str) {
LenheartNewUI_Button.constructor(X, Y, W);
this.TextStr = Str;
TextColor = sq_RGBA(185, 148, 96, 255);
TextRColor = sq_RGBA(227, 212, 154, 255);
TextXoffset = 19;
TextYoffset = 3;
}
function SetTextColor(RGBA) {
TextColor = RGBA;
}
function SetTextOffset(gX, gY) {
TextXoffset = gX;
TextYoffset = gY;
}
function Show(obj) {
LenheartNewUI_Button.Show(obj);
local Color = TextColor;
local SY = Y + TextYoffset;
if (State != 8) {
if (isLBDown) {
SY = Y + TextYoffset + 1;
}
if (isInRect || State == 1) {
Color = TextRColor;
}
}
L_sq_DrawCode(TextStr, X + TextXoffset + 19, SY + 5, Color, 0, 1);
}
//鼠标左键弹起回调 overr
function OnMouseLbUp(MousePos_X, MousePos_Y) {
if (isLBDown && OnClick) {
local obj = sq_getMyCharacter();
obj.sq_PlaySound("CLICK_BUTTON1");
OnClick(Id);
}
isLBDown = false;
}
}
class OnilneSignC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
Visible = false;
//在线时间
OnlineTime = 0;
//在线天数
OnlineDay = 0;
//是否可领取的数组
Reward1Flag = null;
//是否可领取的数组
Reward2Flag = null;
Config = null;
Info = null;
PackTime = 0;
function GetConfigCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
Config = Jso;
}
function GetMyInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
Info = Jso.info;
OnlineDay = Info.RewardDayCountl;
for (local i = 0; i< 10; i++) {
Reward1Flag[i] = Info.reward.slice(0 + i, 1 + i).tointeger();
Reward2Flag[i] = Info.reward2.slice(0 + i, 1 + i).tointeger();
}
PackTime = Clock();
}
//获取信息
function GetInfo() {
local T = {
op = 20065001
}
SendPackEx(T);
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
Reward1Flag = array(10, false);
Reward2Flag = array(10, false);
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20065004, GetConfigCallBack.bindenv(this));
Pack_Control.rawset(20065002, GetMyInfoCallBack.bindenv(this));
GetInfo();
}
function RegisterWidget() {
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(580, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
this.Visible = false;
}.bindenv(this);
Childrens.append(CloseButton);
for (local i = 0; i< 10; i++) {
local PostButton = OnilneSignC_ButtonText(21 + (i * 56), 114, 5, "领取");
PostButton.DWidth = -5;
PostButton.Width = 50;
PostButton.SetTextOffset(-4, 1);
PostButton.Id = i;
PostButton.OnClick = function(Id) {
local Jso = {
op = 20065003,
id = Id,
}
SendPackEx(Jso);
}.bindenv(this);
PostButton.SetCallBackFunc(function(Window) {
if (!Config) return;
local MySuccessTime = Config.config[Window.Id].time;
if (OnlineTime >= MySuccessTime && Reward1Flag[Window.Id] == 0) {
Window.State = 0;
Window.TextStr = "领取";
Window.SetTextOffset(-4, 1);
} else {
Window.State = 8;
Window.TextStr = (MySuccessTime - OnlineTime) + "秒";
if (Reward1Flag[Window.Id] == 1) {
Window.TextStr = "已领取";
Window.SetTextOffset(-9, 1);
}
}
}.bindenv(this))
AddChild(PostButton);
local PostButton2 = OnilneSignC_ButtonText(21 + (i * 56), 114 + 80, 5, "领取");
PostButton2.DWidth = -5;
PostButton2.Width = 50;
PostButton2.SetTextOffset(-4, 1);
PostButton2.Id = i + 10;
PostButton2.OnClick = function(Id) {
local Jso = {
op = 20065003,
id = Id,
}
SendPackEx(Jso);
}.bindenv(this);
PostButton2.SetCallBackFunc(function(Window) {
if (!Config) return;
local MyCumulative = Config.config[Window.Id - 10].cumulative;
if (OnlineDay >= MyCumulative && Reward2Flag[Window.Id - 10] == 0) {
Window.State = 0;
Window.TextStr = "领取";
Window.SetTextOffset(-4, 1);
} else {
Window.State = 8;
Window.TextStr = (MyCumulative - OnlineDay) + "天";
if (Reward2Flag[Window.Id - 10] == 1) {
Window.TextStr = "已领取";
Window.SetTextOffset(-9, 1);
}
}
}.bindenv(this))
AddChild(PostButton2);
}
}
function InterpolateColor(rate) {
if (rate > 1.0) rate = 1.0;
// 起始颜色 (50, 255, 50)
local startColor = [50, 255, 50];
// 目标颜色 (255, 177, 0)
local endColor = [255, 177, 0];
// 计算插值
local red = startColor[0] + ((endColor[0] - startColor[0]).tofloat() * (rate.tofloat() / 100.0)).tointeger();
local green = startColor[1] + ((endColor[1] - startColor[1]).tofloat() * (rate.tofloat() / 100.0)).tointeger();
local blue = startColor[2] + ((endColor[2] - startColor[2]).tofloat() * (rate.tofloat() / 100.0)).tointeger();
local alpha = 180; // 不透明度
return sq_RGBA(red, green, blue, alpha); // 返回 RGBA
}
//绘制主界面
function DrawMain(obj) {
if (!Config || !Info) return;
//绘制窗口底
L_sq_DrawWindow(X + 2, Y + 6, 580, 226, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
L_sq_DrawWindow(X + 10, Y + 25, 584, 224, "interface/windowcommon.img", 204, 4, 14, 4, 14);
//绘制标题栏
L_sq_DrawImg("onlineevent/main.img", 0, X - 1, Y);
OnlineTime = (Info.time + (Clock() - PackTime)) / 1000;
local hours = OnlineTime / 3600;
local minutes = (OnlineTime % 3600) / 60;
local secs = OnlineTime % 60;
local Str = "已在线时间: ";
//绘制已在线时间
L_sq_DrawCode("已在线时间: " + (Info.time + (Clock() - PackTime)) / 1000 + "秒", X + 26, Y + 42, sq_RGBA(255, 177, 0, 250), 1, 1);
//绘制距离下次奖励
L_sq_DrawCode("距离下次奖励", X + 150, Y + 42, sq_RGBA(255, 177, 0, 250), 1, 1);
//绘制实际进度
local rate = (Info.time + (Clock() - PackTime)).tofloat() / (NextRewardTime.tofloat() * 1000.0);
setClip(X + 240, Y + 41, X + 240 + (332.0 * rate).tointeger(), Y + 42 + 14);
local RGBA = InterpolateColor((rate * 100.0).tointeger());
L_sq_DrawImg("onlineevent/main.img", 2, X + 240, Y + 42, 1, RGBA, 1.0, 1.0);
releaseClip(); //裁切结束
//绘制进度条底框
L_sq_DrawImg("onlineevent/main.img", 1, X + 240, Y + 41);
//绘制道具奖励
foreach(Pos, ItemObj in Config.config) {
if (OnlineTime <= ItemObj.time) NextRewardTime = ItemObj.time;
//绘制物品
DrawItemEx(X + 30 + (Pos * 56) + 3, Y + 80, ItemObj.itemId, ItemObj.itemNum);
//绘制物品2
DrawItemEx(X + 30 + (Pos * 56) + 3, Y + 160, ItemObj.cumulativeId, ItemObj.cumulativeNum);
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//心跳时间
HeartTime = 0;
//下次奖励时间
NextRewardTime = 0;
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
if (Clock() - HeartTime >= 10000) {
HeartTime = Clock();
local T = {
op = 20065005
}
SendPackEx(T);
}
}
function OpenCallBack() {
Visible = true;
ResetFocus();
GetInfo();
}
}
getroottable().rawdelete("OnilneSign_Obj");
function Lenheart_OnilneSign_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("OnilneSign_Obj")) {
RootTab.rawset("OnilneSign_Obj", true);
local Win = LenheartNewUI_CreateWindow(OnilneSignC, "在线奖励窗口", ((getroottable().Rindro_Scr_Width - 600) / 2).tointeger(), 160, 600, 260, 22);
EventList_Obj.AddEvent("在线奖励", 28, Win);
}
}
getroottable()["LenheartFuncTab"].rawset("OnilneSignFuncN", Lenheart_OnilneSign_Fun);