/* 文件名: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);