330 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			330 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:ServerAuction.nut | ||
|  | 路径:Project/ServerAuction/ServerAuction.nut | ||
|  | 创建日期:2024-08-20	10:02 | ||
|  | 文件用途:全服竞拍 | ||
|  | */ | ||
|  | class ServerAuctionC extends LenheartNewUI_Windows { | ||
|  |     //调试模式 | ||
|  |     // DeBugMode = true; | ||
|  | 
 | ||
|  |     //不是窗口 | ||
|  |     // NoWindow = true; | ||
|  | 
 | ||
|  |     //是否可见 | ||
|  |     Visible = false; | ||
|  | 
 | ||
|  |     //竞拍是否开启状态 | ||
|  |     AuctionState = false; | ||
|  |     //竞拍项目列表 | ||
|  |     AuctionItemList = null; | ||
|  |     //竞拍名字 | ||
|  |     AuctionName = "暂无竞拍开启"; | ||
|  |     //当前竞拍信息 | ||
|  |     AuctionRealInfo = null; | ||
|  | 
 | ||
|  |     //刷新包时间 | ||
|  |     PackTimer = 0; | ||
|  | 
 | ||
|  |     //是否Gm | ||
|  |     IsGm = false; | ||
|  |     //Gm可开启竞拍列表 | ||
|  |     AuctionList = null; | ||
|  |     //Gm选择的开启竞拍Item | ||
|  |     SelectAuctionItem = null; | ||
|  | 
 | ||
|  |     //展示时间 | ||
|  |     InitTime = 0; | ||
|  |     //竞拍时间 | ||
|  |     ContinuityTime = 0; | ||
|  | 
 | ||
|  |     function GetConfigCallBack(Chunk) { | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         AuctionState = true; | ||
|  |         AuctionItemList = Jso.lots; | ||
|  |         AuctionName = Jso.name; | ||
|  |         //展示时间 | ||
|  |         InitTime = Jso.initTime; | ||
|  |         //竞拍时间 | ||
|  |         ContinuityTime = Jso.continuityTime; | ||
|  |     } | ||
|  | 
 | ||
|  |     function GetConfig() { | ||
|  |         local T = { | ||
|  |             op = 20067001 | ||
|  |         } | ||
|  |         SendPackEx(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     function GmCallBack(Chunk) { | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         IsGm = true; | ||
|  |         AuctionList = Jso.nameS; | ||
|  |     } | ||
|  | 
 | ||
|  |     function AuctionRealInfoCallBack(Chunk) { | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         AuctionRealInfo = Jso; | ||
|  |         PackTimer = Clock(); | ||
|  |     } | ||
|  | 
 | ||
|  |     function CloseAuctionCallBack(Chunk) { | ||
|  |         //竞拍是否开启状态 | ||
|  |         AuctionState = false; | ||
|  |         //竞拍项目列表 | ||
|  |         AuctionItemList = null; | ||
|  |         //竞拍名字 | ||
|  |         AuctionName = "暂无竞拍开启"; | ||
|  |         //当前竞拍信息 | ||
|  |         AuctionRealInfo = null; | ||
|  | 
 | ||
|  |         //刷新包时间 | ||
|  |         PackTimer = 0; | ||
|  | 
 | ||
|  |         //是否Gm | ||
|  |         IsGm = false; | ||
|  |         //Gm可开启竞拍列表 | ||
|  |         AuctionList = null; | ||
|  |         //Gm选择的开启竞拍Item | ||
|  |         SelectAuctionItem = null; | ||
|  | 
 | ||
|  |         //展示时间 | ||
|  |         InitTime = 0; | ||
|  |         //竞拍时间 | ||
|  |         ContinuityTime = 0; | ||
|  |         CloseWindow(); | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { | ||
|  |         Childrens = []; | ||
|  |         AuctionList = []; | ||
|  |         //注册控件 | ||
|  |         RegisterWidget(); | ||
|  | 
 | ||
|  |         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); | ||
|  | 
 | ||
|  | 
 | ||
|  |         //获取竞拍配置 | ||
|  |         Pack_Control.rawset(20067010, GetConfigCallBack.bindenv(this)); | ||
|  |         //Gm回调包 | ||
|  |         Pack_Control.rawset(20067020, GmCallBack.bindenv(this)); | ||
|  |         //拍卖实时信息包 | ||
|  |         Pack_Control.rawset(20067012, AuctionRealInfoCallBack.bindenv(this)); | ||
|  |         //竞拍结束包 | ||
|  |         Pack_Control.rawset(20067014, CloseAuctionCallBack.bindenv(this)); | ||
|  |         GetConfig(); | ||
|  |     } | ||
|  | 
 | ||
|  |     //输入框 | ||
|  |     InputObject = null; | ||
|  | 
 | ||
|  |     function RegisterWidget() { | ||
|  |         //关闭按钮 | ||
|  |         local CloseButton = LenheartNewUI_BaseButton(308, 4, 11, 12, "interface/lenheartwindowcommon.img", 276); | ||
|  |         CloseButton.OnClick = function() { | ||
|  |             this.Visible = false; | ||
|  |         }.bindenv(this); | ||
|  |         CloseButton.SetCallBackFunc(function(win) { | ||
|  |             if (AuctionState) { | ||
|  |                 win.Localtion_X = 308; | ||
|  |                 win.Localtion_Y = 4; | ||
|  |             } else { | ||
|  |                 win.Localtion_X = 252; | ||
|  |                 win.Localtion_Y = 2; | ||
|  |             } | ||
|  |         }.bindenv(this)) | ||
|  |         Childrens.append(CloseButton); | ||
|  | 
 | ||
|  | 
 | ||
|  |         InputObject = LenheartNewUI_BaseInput(26, 340, 130, 20); | ||
|  |         InputObject.SetCallBackFunc(function(win) { | ||
|  |             if (AuctionState) win.Localtion_X = 26; | ||
|  |             else win.Localtion_X = -826; | ||
|  |         }.bindenv(this)) | ||
|  |         AddChild(InputObject); | ||
|  | 
 | ||
|  |         local PostButton = LenheartNewUI_ButtonText(220, 338, 5, "提交竞拍"); | ||
|  |         PostButton.DWidth = 30; | ||
|  |         PostButton.Width = 86; | ||
|  |         PostButton.SetTextOffset(1, 1); | ||
|  |         PostButton.OnClick = function() { | ||
|  |             if (InputObject.str.len() > 0 && AuctionRealInfo) { | ||
|  |                 local Jso = { | ||
|  |                     op = 20067005, | ||
|  |                     count = InputObject.str.tointeger(), | ||
|  |                 } | ||
|  |                 print(Jso.count); | ||
|  |                 SendPackEx(Jso); | ||
|  |             } | ||
|  |         }.bindenv(this); | ||
|  |         PostButton.SetCallBackFunc(function(win) { | ||
|  |             if (AuctionState) win.Localtion_X = 220; | ||
|  |             else win.Localtion_X = -826; | ||
|  |             //物品展示阶段 | ||
|  |             if (AuctionRealInfo && AuctionRealInfo.state == 0) { | ||
|  |                 win.State = 8; | ||
|  |                 win.TextStr = "展示阶段"; | ||
|  |             } else { | ||
|  |                 win.State = 0; | ||
|  |                 win.TextStr = "提交竞拍"; | ||
|  |             } | ||
|  |         }.bindenv(this)) | ||
|  |         AddChild(PostButton); | ||
|  | 
 | ||
|  |         local OpenAuctionButton = LenheartNewUI_ButtonText(220, 393, 5, "开启竞拍"); | ||
|  |         OpenAuctionButton.DWidth = 30; | ||
|  |         OpenAuctionButton.Width = 86; | ||
|  |         OpenAuctionButton.SetTextOffset(1, 1); | ||
|  |         OpenAuctionButton.OnClick = function() { | ||
|  |             if (SelectAuctionItem != null) { | ||
|  |                 local Jso = { | ||
|  |                     op = 20067021, | ||
|  |                     id = AuctionList[SelectAuctionItem][1] | ||
|  |                 } | ||
|  |                 SendPackEx(Jso); | ||
|  |                 CloseWindow(); | ||
|  |             } | ||
|  |         }.bindenv(this); | ||
|  |         OpenAuctionButton.SetCallBackFunc(function(win) { | ||
|  |             if (!AuctionState && IsGm) win.Localtion_X = 95; | ||
|  |             else win.Localtion_X = -826; | ||
|  |         }.bindenv(this)) | ||
|  |         AddChild(OpenAuctionButton); | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制主界面 | ||
|  |     function DrawMain(obj) { | ||
|  | 
 | ||
|  |         if (AuctionState && AuctionRealInfo) { | ||
|  |             //绘制背景 | ||
|  |             L_sq_DrawImg("interface2/yosin/qfjp.img", 4, X, Y); | ||
|  |             //绘制标题 | ||
|  |             L_sq_DrawCode(AuctionName, X + 196 - LenheartTextClass.GetStringLength(AuctionName), Y + 6, sq_RGBA(227, 212, 154, 250), 0, 1); | ||
|  |             // foreach(Pos, Value in AuctionItemList) { | ||
|  |             for (local i = 0; i< 5; i++) { | ||
|  |                 if (i< AuctionItemList.len()) { | ||
|  |                     local Pos = i; | ||
|  |                     local Value = AuctionItemList[i]; | ||
|  |                     //当前拍品 | ||
|  |                     if (Pos == AuctionRealInfo.idx && AuctionRealInfo.state == 1) { | ||
|  |                         local CostItemId = Value.cost; | ||
|  |                         if (Value.cost == -1) CostItemId = 7906; | ||
|  |                         if (Value.cost == -2) CostItemId = 133; | ||
|  |                         //绘制扣除道具 | ||
|  |                         if (Rindro_ItemInfoObject.rawin(CostItemId)) DrawItemEx(X + 40, Y + 284, CostItemId, 1); | ||
|  |                         else L_Sq_DrawItem(X + 40, Y + 284, CostItemId, 1, 0, 0, 0); | ||
|  | 
 | ||
|  |                         local CostName = ""; | ||
|  |                         if (Value.cost == 0) CostName = "金币"; | ||
|  |                         else if (Value.cost == -1) CostName = "点券"; | ||
|  |                         else if (Value.cost == -2) CostName = "代币券"; | ||
|  |                         else CostName = Rindro_ItemInfoObject[CostItemId].Name; | ||
|  |                         //绘制扣除道具名字 | ||
|  |                         L_sq_DrawCode(CostName, X + 79, Y + 300, sq_RGBA(227, 212, 154, 250), 0, 1); | ||
|  |                         //绘制竞品名 | ||
|  |                         L_sq_DrawCode(Rindro_ItemInfoObject[Value.itemId].Name, X + 120, Y + 207, sq_RGBA(227, 212, 154, 250), 0, 1); | ||
|  |                         //绘制最高竞价者 | ||
|  |                         L_sq_DrawCode(AuctionRealInfo.name, X + 120, Y + 230, sq_RGBA(227, 212, 154, 250), 0, 1); | ||
|  |                         //绘制最高竞拍价 | ||
|  |                         L_sq_DrawCode(AuctionRealInfo.costcount.tostring(), X + 120, Y + 252, sq_RGBA(227, 212, 154, 250), 0, 1); | ||
|  | 
 | ||
|  |                         //绘制当前道具显示框 | ||
|  |                         L_sq_SetDrawImgModel(2, 0); | ||
|  |                         L_sq_DrawImg("interface2/yosin/qfjp.img", 3, X + 38 + (Pos * 50), Y + 40); | ||
|  |                         L_sq_ReleaseDrawImgModel(); | ||
|  |                         L_sq_DrawImg("interface2/yosin/qfjp.img", 7, X + 38 + (Pos * 50), Y + 40); | ||
|  | 
 | ||
|  |                         //绘制进度条 | ||
|  |                         local Rate = (Clock() - PackTimer + AuctionRealInfo.remainder).tofloat() / (ContinuityTime * 1000).tofloat(); | ||
|  |                         setClip(X + 29, Y + 119, X + 29 + 272 - (272.0 * Rate).tointeger(), Y + 119 + 12); | ||
|  |                         L_sq_DrawImg("interface2/yosin/qfjp.img", 6, X + 29, Y + 119); | ||
|  |                         releaseClip(); //裁切结束 | ||
|  |                     } | ||
|  | 
 | ||
|  | 
 | ||
|  |                     //绘制拍卖物品 | ||
|  |                     DrawItemBase(X + 51 + (Pos * 50), Y + 54, Value.itemId, Value.count); | ||
|  | 
 | ||
|  |                     if (Pos< AuctionRealInfo.idx) { | ||
|  |                         //绘制道具遮罩框 | ||
|  |                         L_sq_DrawImg("interface2/yosin/qfjp.img", 5, X + 48 + (Pos * 50), Y + 50, 0, sq_RGBA(255, 255, 255, 150), 1.0, 1.0); | ||
|  |                     } | ||
|  |                 } else { | ||
|  |                     // DrawItemBase(X + 51 + (Pos * 50), Y + 54, Value.itemId, Value.count); | ||
|  |                     L_sq_DrawImg("interface/lenheartwindowcommon.img", 606, X + 57 + (i * 50), Y + 58); | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             //展示时间绘制 | ||
|  |             if (AuctionRealInfo.state == 0) { | ||
|  |                 local Rate = (Clock() - PackTimer + AuctionRealInfo.remainder).tofloat() / (InitTime * 1000).tofloat(); | ||
|  |                 setClip(X + 29, Y + 119, X + 29 + 272 - (272.0 * Rate).tointeger(), Y + 119 + 12); | ||
|  |                 L_sq_DrawImg("interface2/yosin/qfjp.img", 8, X + 29, Y + 119); | ||
|  |                 releaseClip(); //裁切结束 | ||
|  |                 //绘制物品展示中 | ||
|  |                 L_sq_DrawCode("物品展示中", X + 135, Y + 96, sq_RGBA(185, 148, 96, 250), 0, 1); | ||
|  |             } | ||
|  |         } | ||
|  |         //Gm设置页面 | ||
|  |         else if (IsGm) { | ||
|  |             //绘制窗口底 | ||
|  |             L_sq_DrawWindow(X, Y, 260, 372, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | ||
|  |             L_sq_DrawWindow(X + 14, Y + 18, 251, 366, "interface/windowcommon.img", 204, 4, 14, 4, 14); | ||
|  | 
 | ||
|  |             foreach(Pos, Value in AuctionList) { | ||
|  |                 local Rx = X + 23; | ||
|  |                 local Ry = Y + 31 + (Pos * 30); | ||
|  |                 L_sq_DrawImg("interface/lenheartwindowcommon.img", 53, Rx, Ry); | ||
|  |                 L_sq_DrawCode(Value[0], Rx + 6, Ry + 5, 0xff00b1ff, 0, 1); | ||
|  |                 if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, Rx, Ry, 228, 21)) { | ||
|  |                     L_sq_DrawImg("interface/lenheartwindowcommon.img", 54, Rx, Ry); | ||
|  |                     if (MouseClickFlag) { | ||
|  |                         SelectAuctionItem = Pos; | ||
|  |                     } | ||
|  |                 } | ||
|  |                 if (Pos == SelectAuctionItem) { | ||
|  |                     L_sq_DrawImg("interface/lenheartwindowcommon.img", 54, Rx, Ry); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function Show(obj) { | ||
|  |         DrawMain(obj); | ||
|  |         LenheartNewUI_Windows.Show(obj); | ||
|  | 
 | ||
|  |         MouseClickFlag = false; | ||
|  |     } | ||
|  | 
 | ||
|  |     //逻辑入口 | ||
|  |     function Proc(obj) { | ||
|  |         LenheartNewUI_Windows.SyncPos(X, Y); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     MouseClickFlag = false; | ||
|  |     //鼠标左键弹起回调 | ||
|  |     function OnMouseLbUp(MousePos_X, MousePos_Y) { | ||
|  |         MouseClickFlag = true; | ||
|  |         LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); | ||
|  |     } | ||
|  | 
 | ||
|  |     function OpenCallBack() { | ||
|  |         GetConfig(); | ||
|  |         this.Visible = true; | ||
|  |         ResetFocus(); | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | getroottable().rawdelete("ServerAuction_Obj"); | ||
|  | 
 | ||
|  | function Lenheart_ServerAuction_Fun(obj) { | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("ServerAuction_Obj")) { | ||
|  |         RootTab.rawset("ServerAuction_Obj", true); | ||
|  |         local Winobj = LenheartNewUI_CreateWindow(ServerAuctionC, "全服竞拍窗口", ((getroottable().Rindro_Scr_Width - 405) / 2).tointeger(), 64, 405, 372, 28); | ||
|  |         EventList_Obj.AddEvent("全服竞拍", 157, Winobj, "interface2/yosin/eventsystemlist.img"); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | getroottable()["LenheartFuncTab"].rawset("ServerAuctionFuncN", Lenheart_ServerAuction_Fun); |