/* 文件名:OnlineEvent.nut 路径:Plugins/OnlineEvent/OnlineEvent.nut 创建日期:2023-05-28 09:54 文件用途: */ //HudPro按钮类 class OnlineEventPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度 { obj = null; //Obj对象 State = 0; //按钮状态 ClickEnble = false; //点击效果 ButtonDynamic = false; //动态按钮效果 BaseFrame = null; CustomClickEnble = false; //自定义点击效果 CustomClickAnifile = null; //自定义点击效果Ani路径 CustomButtonName = null; //自定义点击效果名称 CustomClickFrame = null; //自定义点击效果Ani编号 CustomClickx = null; //自定义点击效果X坐标 CustomClicky = null; //自定义点击效果Y坐标 RectEnble = false; //悬停效果 RectButtonName = null; //悬停名称 RectBaseAnifile = null; //悬停Ani路径 RectFrame = null; //非动态按钮的悬停调用Ani编号 Rectx = null; //悬停X坐标 Recty = null; //悬停Y坐标 ButtonName = null; //按钮名称 x = null; //X坐标 y = null; //Y坐标 BaseAnifile = null; //调用Ani路径 width = null; //可点击宽度 length = null; //可点击高度 Mobj = null; //鼠标对象 //构造函数 constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { obj = gObj; ButtonName = gButtonName; x = gX; y = gY; BaseAnifile = gAnifile; width = gWidth; length = gLength; BaseFrame = gBaseFrame; if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; } //绘制按钮 function Show() { if (ClickEnble) //是否开启点击效果 { if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 { State = 1; //按键进入按下状态 ++y; } if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 { State = 0; //按键进入弹起状态 --y; } } if (CustomClickEnble) //是否开启自定义点击效果 { if (isLBDown()) //按下左键并且按钮处于弹起状态 { if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); } } if (RectEnble) //开启悬停效果时 { if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候 { //IMouse.SetMouseTask(44); if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); } } if (!isInRect()) //如果鼠标没有悬停的时候 { //IMouse.SetMouseTask(0); if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); } } //设置自定义点击效果 function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { CustomClickEnble = bool; //自定义点击效果 CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 CustomButtonName = gButtonName; //自定义点击效果名称 CustomClickFrame = gFrame; //自定义点击效果Ani编号 CustomClickx = gX; //自定义点击效果X坐标 CustomClicky = gY; //自定义点击效果Y坐标 } //设置悬停效果 function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { RectEnble = bool; //悬停效果 RectButtonName = gButtonName; //悬停名称 RectBaseAnifile = gAnifile; //悬停Ani路径 RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 Rectx = gX; //悬停X坐标 Recty = gY; //悬停Y坐标 } //设置动态按钮 function SetClickEnble(bool) { ButtonDynamic = bool; } //设置点击效果 function SetClickEnble(bool) { ClickEnble = bool; } //悬停状态 function isInRect() { if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; else return false; } //左键按下状态 function isLBDown() { if (isInRect() && Mobj.Lb == 1) return true; else return false; } //左键弹起状态 function isLBUp() { if (isInRect() && Mobj.Lb == 0) return true; else return false; } //左键单击状态 function isLBActive() { if (isInRect() && Mobj.LbEvent) return true; else return false; } } class OnlineEventC extends BasicsDrawTool { WindowObj = null; //窗口对象 MainState = false; //主状态 X = 136; Y = 130; TimeObj = null; reward = null; NextRewardTime = null; StaticNowTime = null; NowTime = null; NowDay = null; //ItemInfo ItemInfoObject = null; ItemInfoDrawS = null; //查询 玩家信息 function GetPlayerInfo() { local T = { op = 20052001, } local str = Json.Encode(T); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); } //回调 查询 玩家信息 function GetPlayerInfoCallBack(Chunk) { // Sout("收到包内容为 \n %L", Chunk); local Buffer = Json_STL("OnlineEvent_GetPlayerInfo_Pack_CallBack"); Buffer.Parse(Chunk, 0, false); local RootTab = getroottable(); if (RootTab.rawin("OnlineEventCObj")) { reward = null; reward = []; StaticNowTime = null; NowDay = null; StaticNowTime = Buffer.Get("time"); NowDay = Buffer.Get("currentCumulative"); for (local i = 0; i< 10; i++) { local gNormalItemId = Buffer.Get("reward->" + i + "->itemId"); local gNormalItemCount = Buffer.Get("reward->" + i + "->itemNum"); local gNormalNeedTime = Buffer.Get("reward->" + i + "->time"); local gNormalComplete = Buffer.Get("timeReward->" + i); local gExItemId = Buffer.Get("reward->" + i + "->cumulativeId"); local gExItemCount = Buffer.Get("reward->" + i + "->cumulativeNum"); local gExNeedTime = Buffer.Get("reward->" + i + "->cumulative"); local gExComplete = Buffer.Get("accumulateReward->" + i); local T = { NormalItemId = gNormalItemId, NormalItemCount = gNormalItemCount, NormalNeedTime = gNormalNeedTime, NormalComplete = gNormalComplete, ExItemId = gExItemId, ExItemCount = gExItemCount, ExNeedTime = gExNeedTime, ExNeedTime = gExNeedTime, ExComplete = gExComplete, } reward.append(T); } local ItemGetArray = {}; foreach(P, V in reward) { local ItemId = V.NormalItemId; if (!ItemInfoObject.rawin(ItemId)) { if (!ItemGetArray.rawin(ItemId)) ItemGetArray.rawset(ItemId, true); } ItemId = V.ExItemId; if (!ItemInfoObject.rawin(ItemId)) { if (!ItemGetArray.rawin(ItemId)) ItemGetArray.rawset(ItemId, true); } } if (ItemGetArray.len() > 0) { local arr = []; foreach(Key, Value in ItemGetArray) { arr.append(Key); } local T = { op = 20231010, realop = 20052004, itemId = arr, Type = 2, } SendPack(T); } OnlineEventTimeReset(); } } function CheckItemInfoCallBack(Chunk) { // Sout("收到包内容为 \n %L", Chunk); local Jso = Json.Decode(Chunk); foreach(Pos, Value in Jso.itemInfo) { if (Value.Name2.len() == 0) Value.Name2 = "Yosin-Team"; ItemInfoObject.rawset(Jso.itemId[Pos], Value); } } //刷新时间容器 function OnlineEventTimeReset() { if (TimeObj) TimeObj.Delete(); TimeObj = null; TimeObj = TimeSTL("OnlineEventTimeObj", 90000000); TimeObj.Reset(); TimeObj.Start(); } constructor() { if (TimeObj) TimeObj.Delete(); TimeObj = null; TimeObj = TimeSTL("OnlineEventTimeObj", 90000000); TimeObj.Delete(); TimeObj = null; ItemInfoObject = {}; Pack_Control.rawset(20052002, GetPlayerInfoCallBack.bindenv(this)); //查询道具信息回调 Pack_Control.rawset(20052004, CheckItemInfoCallBack.bindenv(this)); GetPlayerInfo(); } //绘制在线时间 function DrawNowOnlineTime(obj) { if (TimeObj) NowTime = StaticNowTime + (TimeObj.Get() / 1000).tointeger(); //当前时间 if (NowTime) { L_sq_DrawCode(NowTime + "秒", X + 94, Y + 39, sq_RGBA(255, 255, 184, 250), 0, 1); //下个奖励的可领取时间 if (NextRewardTime) { local AniNowTime = (StaticNowTime * 1000) + TimeObj.Get(); local AniNextTime = NextRewardTime * 1000; T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 1, "OnlineEvent_NextRewardTime_Main"); setClip(X + 310, Y + 33, X + 310 + ((AniNowTime.tofloat() / AniNextTime.tofloat()) * 174.0).tointeger(), Y + 56); //开始裁切 T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 2, "OnlineEvent_NextRewardTime_Main"); releaseClip(); //裁切结束 } else { T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 1, "OnlineEvent_NextRewardTime_Main"); T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 310, Y + 33, 2, "OnlineEvent_NextRewardTime_Main"); } } if (NowDay) { L_sq_DrawCode(NowDay + "天", X + 94 + 40, Y + 39 + 104, sq_RGBA(255, 255, 184, 250), 0, 1); } } //绘制道具带道具信息 function DrawItemEx(X, Y, Id, Count) { L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0); if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) { ItemInfoDrawS = {}; ItemInfoDrawS.X <- X; ItemInfoDrawS.Y <- Y; ItemInfoDrawS.ItemId <- Id; } } //绘制道具相信信息 ItemObject = null; function DrawItemInfo(obj) { if (ItemInfoDrawS) { if (!ItemObject) { local ItemId = ItemInfoDrawS.ItemId; if (ItemInfoObject.rawin(ItemId)) { ItemObject = ItemInfoClass(ItemInfoObject[ItemId]); } } ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); } else { ItemObject = null; } } //绘制奖励 function DrawReward(obj) { if (reward) { //下次奖励可领取时间销毁 NextRewardTime = null; ItemInfoDrawS = null; for (local i = 0; i< 10; i++) { //绘制普通奖励 DrawItemEx(X + 13 + 3 + (52 * i), Y + 43 + 24, reward[i].NormalItemId, reward[i].NormalItemCount); //绘制是否可领取 if (reward[i].NormalNeedTime< NowTime) { if (reward[i].NormalComplete) { T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, 6, "OnlineEvent_Reward_Complete"); } else { //TODO 达到领取条件 但是还未领取 local Button = OnlineEventPro(obj, "OnlineEvent_Reward_Button" + i, X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 28, 18, 3); Button.SetRectEnble(true, "OnlineEvent_Reward_Buttonr" + i, X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 4); Button.SetCustomClickEnble(true, "OnlineEvent_Reward_Buttonc" + i, X + 12 + 4 + (52 * i), Y + 42 + 24 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 5); Button.Show(); if (Button.isLBActive()) { local T = { op = 20052007, rewardIndex = i, } local str = Json.Encode(T); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetPlayerInfo(); } } } else { //只记录最短的一个可领取时间差 if (!NextRewardTime) NextRewardTime = reward[i].NormalNeedTime; //绘制剩余所需时间 L_sq_DrawCode((reward[i].NormalNeedTime - NowTime).tostring() + "s", X + 13 + 5 + (52 * i), Y + 43 + 24 + 32, sq_RGBA(255, 255, 184, 250), 0, 1); } //绘制累计奖励 DrawItemEx(X + 13 + 3 + (52 * i), Y + 43 + 128, reward[i].ExItemId, reward[i].ExItemCount); if (reward[i].ExNeedTime< NowDay) { if (reward[i].ExComplete) { T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, 6, "OnlineEvent_Reward_Ex_Complete"); } else { //TODO 达到领取条件 但是还未领取 local ExButton = OnlineEventPro(obj, "OnlineEvent_Reward_Ex_Button" + i, X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 28, 18, 3); ExButton.SetRectEnble(true, "OnlineEvent_Reward_Ex_Buttonr" + i, X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 4); ExButton.SetCustomClickEnble(true, "OnlineEvent_Reward_Ex_Buttonc" + i, X + 12 + 4 + (52 * i), Y + 42 + 128 + 30, "common/onlineevent/yosin/zaixianhuodong.ani", 5); ExButton.Show(); if (ExButton.isLBActive()) { local T = { op = 20052007, rewardIndex = i + 10, } local str = Json.Encode(T); L_sq_SendPackType(130); L_sq_SendPackWChar(str); L_sq_SendPack(); GetPlayerInfo(); } } } else { //绘制剩余所需时间 L_sq_DrawCode((reward[i].ExNeedTime - NowDay).tostring() + "天", X + 13 + 5 + (52 * i), Y + 43 + 128 + 32, sq_RGBA(255, 255, 184, 250), 0, 1); } } } } //绘制主界面 function DrawMain(obj) { T_DrawStayAni(obj, "common/onlineevent/yosin/zaixianhuodong.ani", X, Y, 0, "OnlineEvent_Main"); //绘制在线时间 DrawNowOnlineTime(obj); //绘制奖励 DrawReward(obj); DrawItemInfo(obj); } //开启界面回调 function OpenClassCallBack() { L_NewWindows("Lenheart", 170, 0x65535); local W = sq_GetPopupWindowMainCotrol(170); W.SetVisible(false); W.SetEnable(false); GetPlayerInfo(); } //绘制入口 function Draw(obj) { if (MainState) { if (WindowObj) { DrawMain(obj); WindowObj.Show(obj); X = WindowObj.X; Y = WindowObj.Y; } else { WindowObj = LenheartWindow(X, Y, 527, 258, 28); //坐标 大小 标题栏高度 //WindowObj.DeBugMode = true; } } else { if (WindowObj && WindowObj.YMouseSw == false) { IMouse.ReleaseMouseClick(); WindowObj.YMouseSw = true; WindowObj = null; } } } //逻辑入口 function Proc(obj) { if (KeyPressNB.isKeyPress(48, "OnlineEventCloseKey")) { MainState = false; } } } function OnlineEvent_New_Lenheart(obj) { local RootTab = getroottable(); if (!RootTab.rawin("OnlineEventCObj")) { local Cobj = OnlineEventC(); RootTab.rawset("OnlineEventCObj", Cobj); EventIcon("在线活动", 28, 4, Cobj); } else { RootTab["OnlineEventCObj"].Proc(obj); RootTab["OnlineEventCObj"].Draw(obj); } } if (getroottable().rawin("LenheartFuncTab")) { getroottable()["LenheartFuncTab"].rawset("OnlineEvent_New_LenheartFunc", OnlineEvent_New_Lenheart); } else { local T = {}; T.rawset("OnlineEvent_New_LenheartFunc", OnlineEvent_New_Lenheart); getroottable().rawset("LenheartFuncTab", T); }