282 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			282 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:Tomb.nut | ||
|  | 路径:Plugins/Tomb/Tomb.nut | ||
|  | 创建日期:2023-10-28	17:40 | ||
|  | 文件用途: | ||
|  | */ | ||
|  | 
 | ||
|  | 
 | ||
|  | class TombC extends BasicsDrawTool { | ||
|  |     WindowObj = null; //窗口对象 | ||
|  |     MainState = false; //主状态 | ||
|  |     X = 300; | ||
|  |     Y = 160; | ||
|  | 
 | ||
|  |     //层数 | ||
|  |     Index = 0; | ||
|  |     //总层数 | ||
|  |     MaxIndex = 0; | ||
|  |     //道具 | ||
|  |     ItemInfoObject = null; | ||
|  |     //需要的道具名字 | ||
|  |     ItemName = null; | ||
|  |     //需要的道具数量 | ||
|  |     ItemCount = null; | ||
|  | 
 | ||
|  |     UseFlag = false; | ||
|  |     EndFlag = false; | ||
|  | 
 | ||
|  |     function GetInfoCallBack(Chunk) { | ||
|  |         Sout("收到包 : \n %L", Chunk); | ||
|  |         ItemInfoObject = null; | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         Index = Jso.index; | ||
|  |         MaxIndex = Jso.endSize; | ||
|  | 
 | ||
|  |         ItemName = Jso.useItemInfo.Name; | ||
|  |         ItemCount = Jso.useNum; | ||
|  | 
 | ||
|  |         EndFlag = !Jso.end; | ||
|  | 
 | ||
|  |         ItemInfoObject = Jso.itemInfo; | ||
|  |         if (ItemInfoObject.Name2.len() == 0) | ||
|  |             ItemInfoObject.Name2 = "Rindro-Team"; | ||
|  |     } | ||
|  | 
 | ||
|  |     function GetInfo() { | ||
|  |         local T = { | ||
|  |             op = 20062013 | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //失败 | ||
|  |     function OpenTombCallBack_L(Chunk) { | ||
|  |         // Sout("收到包 : \n %L", Chunk); | ||
|  |     } | ||
|  |     //成功 | ||
|  |     function OpenTombCallBack_S(Chunk) { | ||
|  |         // Sout("收到包 : \n %L", Chunk); | ||
|  |     } | ||
|  | 
 | ||
|  |     //拔剑 | ||
|  |     function OpenTomb() { | ||
|  |         local T = { | ||
|  |             op = 20062003, | ||
|  |             index = Index | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     function GetMyStkFlagCallBack(Chunk) { | ||
|  |         // Sout("收到包 : \n %L", Chunk); | ||
|  |         local Jso = Json.Decode(Chunk); | ||
|  |         UseFlag = Jso.useFlag; | ||
|  |     } | ||
|  | 
 | ||
|  |     //获取自身材料 | ||
|  |     function GetMyStkFlag() { | ||
|  |         local T = { | ||
|  |             op = 20062019 | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     constructor() { | ||
|  |         //获取基础配置回调包 | ||
|  |         Pack_Control.rawset(20062014, GetInfoCallBack.bindenv(this)); | ||
|  |         //拔剑结果包 | ||
|  |         Pack_Control.rawset(20062008, OpenTombCallBack_L.bindenv(this)); | ||
|  |         Pack_Control.rawset(20062006, OpenTombCallBack_S.bindenv(this)); | ||
|  |         //自身材料是否足够回调包 | ||
|  |         Pack_Control.rawset(20062020, GetMyStkFlagCallBack.bindenv(this)); | ||
|  |         //获取自身材料是否足够 | ||
|  | 
 | ||
|  | 
 | ||
|  |         GetInfo(); | ||
|  |         GetMyStkFlag(); | ||
|  |     } | ||
|  | 
 | ||
|  |     QuestTips = false; | ||
|  | 
 | ||
|  |     //绘制主界面 | ||
|  |     function DrawMain(obj) { | ||
|  |         // if (!ItemInfoObject) return; | ||
|  |         //Item信息框一般为211的宽度 | ||
|  |         L_sq_DrawWindow(X, Y, 210, 200, "interface/lenheartwindowcommon.img", 0, 11, 12, 11, 13); | ||
|  | 
 | ||
|  |         //绘制背景 | ||
|  |         L_sq_DrawImg("interface2/event/chn_event_2015/chn_tomb_ui.img", 0, X + 10, Y + 16); | ||
|  | 
 | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 150, Y + 196, 16, 16)) { | ||
|  |             L_sq_DrawImg("interface/lenheartwindowcommon.img", 240, X + 150, Y + 196); | ||
|  |             QuestTips = true; | ||
|  |         } else { | ||
|  |             L_sq_DrawImg("interface/lenheartwindowcommon.img", 239, X + 150, Y + 196); | ||
|  |             QuestTips = false; | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         //关闭按钮 | ||
|  |         local CloseButton = LenheartBaseButton(X + 206, Y + 1, 11, 12, "interface/lenheartwindowcommon.img", 276); | ||
|  |         CloseButton.Show(); | ||
|  |         if (CloseButton.isLBActive()) { | ||
|  |             obj.sq_PlaySound("CLICK_BUTTON2"); | ||
|  |             L_sq_UseSkill(DIK_ESCAPE); | ||
|  |             MainState = false; | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         if (!UseFlag || !EndFlag) { | ||
|  |             local Str = "材料不足"; | ||
|  |             if (UseFlag && !EndFlag) Str = "活动结束"; | ||
|  |             local OpenButton = LenheartButtonText(X + 70, Y + 120 + 20 + 31 + 20, 22, Str); | ||
|  |             OpenButton.SetFrame(null, 323); | ||
|  |             OpenButton.SetTextOffset(-3, 1); | ||
|  |             OpenButton.Show(); | ||
|  |         } else { | ||
|  |             //拔剑按钮 | ||
|  |             local OpenButton = LenheartButtonText(X + 70, Y + 120 + 20 + 31 + 20, 22, "拔 剑"); | ||
|  |             OpenButton.SetFrame(null, 323); | ||
|  |             OpenButton.SetTextOffset(6, 1); | ||
|  |             OpenButton.Show(); | ||
|  |             if (OpenButton.isLBActive()) { | ||
|  |                 obj.sq_PlaySound("CLICK_BUTTON2"); | ||
|  |                 AniState = 1; | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |         DrawAni(obj); | ||
|  | 
 | ||
|  | 
 | ||
|  |         if (AniState == 0) T_DrawDynamicAni(obj, "common/tomb/stay.ani", X + 113, Y + 179, "TombEffectStay"); | ||
|  | 
 | ||
|  |         //特殊奖励 | ||
|  |         if (ItemInfoObject) DrawItemEx(X + 96, Y + 120, ItemInfoObject.Id, 1); | ||
|  |     } | ||
|  | 
 | ||
|  |     AniState = 0; | ||
|  | 
 | ||
|  |     function DrawAni(obj) { | ||
|  |         if (AniState == 1) { | ||
|  |             local Ani = T_DrawDynamicAni(obj, "common/tomb/pick.ani", X + 113, Y + 179, "TombEffect"); | ||
|  |             if (sq_IsEnd(Ani)) { | ||
|  |                 sq_Rewind(Ani); | ||
|  |                 AniState = 0; | ||
|  |                 OpenTomb(); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //开启界面回调 | ||
|  |     function OpenClassCallBack() { | ||
|  | 
 | ||
|  |         L_NewWindows("Lenheart", 170, 0x65535); | ||
|  |         local W = sq_GetPopupWindowMainCotrol(170); | ||
|  |         W.SetVisible(false); | ||
|  |         W.SetEnable(false); | ||
|  |         GetInfo(); | ||
|  |         GetMyStkFlag(); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //绘制道具相信信息 | ||
|  |     ItemObject = null; | ||
|  |     ItemInfoDrawS = null; | ||
|  | 
 | ||
|  |     function DrawItemInfo(obj) { | ||
|  |         if (ItemInfoDrawS && ItemInfoObject) { | ||
|  |             if (!ItemObject) { | ||
|  |                 local ItemId = ItemInfoDrawS.ItemId; | ||
|  |                 // if (ItemInfoObject.rawin(ItemId)) { | ||
|  |                 ItemObject = ItemInfoClass(ItemInfoObject); | ||
|  |                 // } | ||
|  |             } | ||
|  |             ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength); | ||
|  |         } else { | ||
|  |             ItemObject = null; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制入口 | ||
|  |     function Draw(obj) { | ||
|  |         ItemInfoDrawS = null; | ||
|  |         if (MainState) { | ||
|  |             if (WindowObj) { | ||
|  |                 DrawMain(obj); | ||
|  |                 DrawSuspensionLayer(obj); | ||
|  |                 WindowObj.Show(obj); | ||
|  |                 X = WindowObj.X; | ||
|  |                 Y = WindowObj.Y; | ||
|  | 
 | ||
|  |                 DrawItemInfo(obj); | ||
|  |             } else { | ||
|  |                 WindowObj = LenheartWindow(X, Y, 224, 228, 28); //坐标 大小 标题栏高度 | ||
|  |                 // WindowObj.DeBugMode = true; | ||
|  |             } | ||
|  |         } else { | ||
|  |             if (WindowObj && WindowObj.YMouseSw == false) { | ||
|  |                 IMouse.ReleaseMouseClick(); | ||
|  |                 WindowObj.YMouseSw = true; | ||
|  |                 WindowObj = null; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //逻辑入口 | ||
|  |     function Proc(obj) { | ||
|  |         if (KeyPressNB.isKeyPress(48, "TombCloseKey")) { | ||
|  |             MainState = false; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     ItemInfoDrawS = null; | ||
|  |     //绘制道具带道具信息 | ||
|  |     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; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //悬浮层 | ||
|  |     function DrawSuspensionLayer(obj) { | ||
|  |         //任务提示 | ||
|  |         if (QuestTips) { | ||
|  |             L_sq_DrawWindow(X + 40, Y + 150, 224, 40, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); | ||
|  |             local QuestTipsStr = "背包在存在道具 [ " + ItemName + " ] x" + ItemCount + "个时,可参与拔剑活动。\n当前拔剑层数为 [ " + (Index + 1) + " ]层,总层数为 [ " + (MaxIndex + 1) + " ]层。"; | ||
|  |             local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251); | ||
|  |             foreach(Pos, va in QuestTipsArray) { | ||
|  |                 // Sout("文本内容嗯: %L", va); | ||
|  |                 L_sq_DrawCode(va, X + 40 + 7, Y + 7 + 150 + (Pos * 16), 0xFFFFFFFF, 1, 1); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function Tomb(obj) { | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("TombCObj")) { | ||
|  |         local Cobj = TombC(); | ||
|  |         RootTab.rawset("TombCObj", Cobj); | ||
|  |         EventIcon("拔剑挑战", 271, 271, Cobj); | ||
|  |     } else { | ||
|  |         RootTab["TombCObj"].Proc(obj); | ||
|  |         RootTab["TombCObj"].Draw(obj); | ||
|  |     } | ||
|  | } | ||
|  | if (getroottable().rawin("LenheartFuncTab")) { | ||
|  |     getroottable()["LenheartFuncTab"].rawset("Tomb_LenheartFunc", Tomb); | ||
|  | } else { | ||
|  |     local T = {}; | ||
|  |     T.rawset("Tomb_LenheartFunc", Tomb); | ||
|  |     getroottable().rawset("LenheartFuncTab", T); | ||
|  | } |