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