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); |