300 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			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); |