182 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			182 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:EventShop.nut | ||
|  | 路径:Project/EventShop/EventShop.nut | ||
|  | 创建日期:2025-01-11	13:59 | ||
|  | 文件用途:活动商店 | ||
|  | */ | ||
|  | class EventShopC extends LenheartNewUI_Windows { | ||
|  |     //调试模式 | ||
|  |     // DeBugMode = true; | ||
|  | 
 | ||
|  |     //不是窗口 | ||
|  |     // NoWindow = true; | ||
|  | 
 | ||
|  |     //是否可见 | ||
|  |     Visible = false; | ||
|  | 
 | ||
|  |     //商品列表 | ||
|  |     GoodsList = null; | ||
|  |     //当前商店归属NPC | ||
|  |     NPC_Index = -1; | ||
|  |     //活动币数量 | ||
|  |     ActivityCoin = 99999; | ||
|  | 
 | ||
|  |     WindowImg = Rindro_Image("eventshop/main.img"); | ||
|  | 
 | ||
|  |     //配置包 | ||
|  |     function BaseConfig(Chunk) { | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         //注册NPC功能 | ||
|  |         RegisterNpc(Jso.npc); | ||
|  |         foreach(npc_id in Jso.npc) { | ||
|  |             RegisterNpc(npc_id); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //请求商品列表 | ||
|  |     function RequestGoodsList(Index) { | ||
|  |         local T = { | ||
|  |             op = 20088001, | ||
|  |             npc = Index | ||
|  |         } | ||
|  |         SendPackEx(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //请求商品列表回调 | ||
|  |     function RequestGoodsListCallBack(Chunk) { | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         GoodsList = Jso.itemShops; | ||
|  |         ActivityCoin = Jso.count; | ||
|  |         NPC_Index = Jso.npc; | ||
|  |         //初始化商店 | ||
|  |         InitGoodsList(); | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { | ||
|  |         Childrens = []; | ||
|  |         //注册控件 | ||
|  |         RegisterWidget(); | ||
|  | 
 | ||
|  |         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); | ||
|  | 
 | ||
|  |         Pack_Control.rawset(20088004, BaseConfig.bindenv(this)); | ||
|  |         Pack_Control.rawset(20088002, RequestGoodsListCallBack.bindenv(this)); | ||
|  | 
 | ||
|  |         RequestGoodsList(2); | ||
|  |     } | ||
|  | 
 | ||
|  |     function RegisterNpc(id) { | ||
|  |         local EachManager = getroottable()["L_Each_Obj"]; | ||
|  |         //先清空注册 | ||
|  |         EachManager.RemoveEachForNpc(id); | ||
|  | 
 | ||
|  |         EachManager.AddEachForNpc(id, function(SThis) { | ||
|  |             //关闭按钮 | ||
|  |             local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3); | ||
|  |             ApplyEngagementButton.Icon = "interface2/popup_menu/popup_icon_cn.img"; | ||
|  |             ApplyEngagementButton.IconIdx = 7; | ||
|  |             ApplyEngagementButton.Str = "活动商店"; | ||
|  |             ApplyEngagementButton.OnClick = function(Button) { | ||
|  |                 Button.Parent.CloseAllEach(); | ||
|  |                 Button.Parent.CloseWindow(); | ||
|  |                 RequestGoodsList(Button.Parent.NPC_Index); | ||
|  |                 Visible = true; | ||
|  |                 ResetFocus(); | ||
|  |             }.bindenv(this); | ||
|  |             ApplyEngagementButton.SetCallBackFunc(function(Button) {}) | ||
|  |             SThis.AddChild(ApplyEngagementButton); | ||
|  |         }.bindenv(this)); | ||
|  |     } | ||
|  | 
 | ||
|  |     function RegisterWidget() { | ||
|  |         // //关闭按钮 | ||
|  |         // local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276); | ||
|  |         // CloseButton.OnClick = function() { | ||
|  |         //     this.Visible = false; | ||
|  |         // }.bindenv(this); | ||
|  |         // Childrens.append(CloseButton); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //初始化商店 | ||
|  |     function InitGoodsList() { | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制项目 | ||
|  |     function DrawItemCur(Object, XPos, Ypos) { | ||
|  |         DrawItemBase(XPos, Ypos, Object.itemId, Object.num); | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, XPos, Ypos, 24, 24)) { | ||
|  |             WindowImg.DrawPng(1, XPos, Ypos); | ||
|  |             L_sq_DrawCode("所需活动币: " + Object.reItemNum, X + 26, Y + 288, sq_RGBA(189, 159, 126, 255), 0, 1); | ||
|  |             if (MouseClickFlag) { | ||
|  |                 local T = { | ||
|  |                     op = 20088005, | ||
|  |                     npc = NPC_Index, | ||
|  |                     itemId = Object.itemId, | ||
|  |                     itemNum = 1 | ||
|  |                 } | ||
|  |                 SendPackEx(T); | ||
|  |             } | ||
|  |         } else { | ||
|  |             // if (Info.vis) { | ||
|  |             //     //关闭道具信息窗口 | ||
|  |             //     L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0); | ||
|  |             //     Info.vis = false; | ||
|  |             //     DrawItemCurObject = null; | ||
|  |             // } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     MouseClickFlag = false; | ||
|  |     //鼠标左键弹起回调 | ||
|  |     function OnMouseLbUp(MousePos_X, MousePos_Y) { | ||
|  |         MouseClickFlag = true; | ||
|  |         LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制主界面 | ||
|  |     function DrawMain(obj) { | ||
|  |         if (!GoodsList) return; | ||
|  |         WindowImg.DrawPng(0, X + 0, Y + 0); | ||
|  | 
 | ||
|  |         foreach(Pos, Object in GoodsList) { | ||
|  |             DrawItemCur(Object, X + 24 + ((Pos % 7) * 30), Y + 64 + ((Pos / 7) * 30)); | ||
|  |         } | ||
|  | 
 | ||
|  |         //绘制活动币数量 | ||
|  |         L_sq_DrawCode(ActivityCoin.tostring(), X + 188 - LenheartTextClass.GetStringLength(ActivityCoin.tostring()) / 2, Y + 288, sq_RGBA(189, 159, 126, 255), 0, 1); | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 124, Y + 284, 21, 21)) { | ||
|  |             L_sq_DrawWindow(X + 40, Y - 100 + 350, 224, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | ||
|  |             local QuestTipsStr = "拥有的活动币数量,活动币可在游戏中获得,请留意有以内的各种玩法!"; | ||
|  |             local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251); | ||
|  |             foreach(Pos, va in QuestTipsArray) { | ||
|  |                 // Sout("文本内容嗯: %L", va); | ||
|  |                 L_sq_DrawCode(va, X + 40 + 7, Y - 100 + 7 + 350 + (Pos * 16), 0xFFFFFFFF, 1, 1); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function Show(obj) { | ||
|  |         DrawMain(obj); | ||
|  |         LenheartNewUI_Windows.Show(obj); | ||
|  |         MouseClickFlag = false; | ||
|  |     } | ||
|  | 
 | ||
|  |     //逻辑入口 | ||
|  |     function Proc(obj) { | ||
|  |         LenheartNewUI_Windows.SyncPos(X, Y); | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | getroottable().rawdelete("EventShop_Obj"); | ||
|  | 
 | ||
|  | function Lenheart_EventShop_Fun(obj) { | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("EventShop_Obj")) { | ||
|  |         RootTab.rawset("EventShop_Obj", true); | ||
|  |         LenheartNewUI_CreateWindow(EventShopC, "活动商店窗口", 60, 120, 260, 318, 32); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | getroottable()["LenheartFuncTab"].rawset("EventShopFuncN", Lenheart_EventShop_Fun); |