1076 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			1076 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:Fate_Select.nut | ||
|  | 路径:Plugins/Fate_Select/Fate_Select.nut | ||
|  | 创建日期:2023-06-23	14:51 | ||
|  | 文件用途:命运的抉择 | ||
|  | */ | ||
|  | 
 | ||
|  | //HudPro按钮类 | ||
|  | class Fate_SelectPro extends BasicsDrawTool //  obj  --  按钮名称  --  X坐标  --  Y坐标  --  Ani调用路径  --  宽度  --  高度 | ||
|  | { | ||
|  |     obj = null; //Obj对象 | ||
|  |     State = 0; //按钮状态 | ||
|  |     ClickEnble = false; //点击效果 | ||
|  |     ButtonDynamic = false; //动态按钮效果 | ||
|  |     BaseFrame = null; | ||
|  | 
 | ||
|  |     CustomClickEnble = false; //自定义点击效果 | ||
|  |     CustomClickAnifile = null; //自定义点击效果Ani路径 | ||
|  |     CustomButtonName = null; //自定义点击效果名称 | ||
|  |     CustomClickFrame = null; //自定义点击效果Ani编号 | ||
|  |     CustomClickx = null; //自定义点击效果X坐标 | ||
|  |     CustomClicky = null; //自定义点击效果Y坐标 | ||
|  | 
 | ||
|  | 
 | ||
|  |     RectEnble = false; //悬停效果 | ||
|  |     RectButtonName = null; //悬停名称 | ||
|  |     RectBaseAnifile = null; //悬停Ani路径 | ||
|  |     RectFrame = null; //非动态按钮的悬停调用Ani编号 | ||
|  |     Rectx = null; //悬停X坐标 | ||
|  |     Recty = null; //悬停Y坐标 | ||
|  | 
 | ||
|  | 
 | ||
|  |     ButtonName = null; //按钮名称 | ||
|  |     x = null; //X坐标 | ||
|  |     y = null; //Y坐标 | ||
|  |     BaseAnifile = null; //调用Ani路径 | ||
|  |     width = null; //可点击宽度 | ||
|  |     length = null; //可点击高度 | ||
|  | 
 | ||
|  |     Mobj = null; //鼠标对象 | ||
|  |     //构造函数 | ||
|  |     constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) { | ||
|  |         obj = gObj; | ||
|  |         ButtonName = gButtonName; | ||
|  |         x = gX; | ||
|  |         y = gY; | ||
|  |         BaseAnifile = gAnifile; | ||
|  |         width = gWidth; | ||
|  |         length = gLength; | ||
|  |         BaseFrame = gBaseFrame; | ||
|  |         if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; | ||
|  |     } | ||
|  |     //绘制按钮 | ||
|  |     function Show() { | ||
|  |         if (ClickEnble) //是否开启点击效果 | ||
|  |         { | ||
|  |             if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态 | ||
|  |             { | ||
|  |                 State = 1; //按键进入按下状态 | ||
|  |                 ++y; | ||
|  |             } | ||
|  |             if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态 | ||
|  |             { | ||
|  |                 State = 0; //按键进入弹起状态 | ||
|  |                 --y; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         if (CustomClickEnble) //是否开启自定义点击效果 | ||
|  |         { | ||
|  |             if (isLBDown()) //按下左键并且按钮处于弹起状态 | ||
|  |             { | ||
|  |                 if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName); | ||
|  |                 else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         if (RectEnble) //开启悬停效果时 | ||
|  |         { | ||
|  |             if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候  并且没有点击的时候 | ||
|  |             { | ||
|  |                 //IMouse.SetMouseTask(44); | ||
|  |                 if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName); | ||
|  |                 else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName); | ||
|  |             } | ||
|  |         } | ||
|  |         if (!isInRect()) //如果鼠标没有悬停的时候 | ||
|  |         { | ||
|  |             //IMouse.SetMouseTask(0); | ||
|  |             if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName); | ||
|  |             else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置自定义点击效果 | ||
|  |     function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { | ||
|  |         CustomClickEnble = bool; //自定义点击效果 | ||
|  |         CustomClickAnifile = gAnifile; //自定义点击效果Ani路径 | ||
|  |         CustomButtonName = gButtonName; //自定义点击效果名称 | ||
|  |         CustomClickFrame = gFrame; //自定义点击效果Ani编号 | ||
|  |         CustomClickx = gX; //自定义点击效果X坐标 | ||
|  |         CustomClicky = gY; //自定义点击效果Y坐标 | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置悬停效果 | ||
|  |     function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) { | ||
|  |         RectEnble = bool; //悬停效果 | ||
|  |         RectButtonName = gButtonName; //悬停名称 | ||
|  |         RectBaseAnifile = gAnifile; //悬停Ani路径 | ||
|  |         RectFrame = gFrame; //非动态按钮的悬停调用Ani编号 | ||
|  |         Rectx = gX; //悬停X坐标 | ||
|  |         Recty = gY; //悬停Y坐标 | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置动态按钮 | ||
|  |     function SetClickEnble(bool) { | ||
|  |         ButtonDynamic = bool; | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置点击效果 | ||
|  |     function SetClickEnble(bool) { | ||
|  |         ClickEnble = bool; | ||
|  |     } | ||
|  | 
 | ||
|  |     //悬停状态 | ||
|  |     function isInRect() { | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  |     //左键按下状态 | ||
|  |     function isLBDown() { | ||
|  |         if (isInRect() && Mobj.Lb == 1) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  |     //左键弹起状态 | ||
|  |     function isLBUp() { | ||
|  |         if (isInRect() && Mobj.Lb == 0) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     //左键单击状态 | ||
|  |     function isLBActive() { | ||
|  |         if (isInRect() && Mobj.LbEvent) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | class Fate_SelectWindow extends BasicsDrawTool { | ||
|  |     //宽度 | ||
|  |     Width = null; | ||
|  |     //高度 | ||
|  |     Height = null; | ||
|  |     //标题高度 | ||
|  |     TitleH = null; | ||
|  | 
 | ||
|  |     //X坐标 | ||
|  |     X = null; | ||
|  |     B_X = null; | ||
|  |     //Y坐标 | ||
|  |     Y = null; | ||
|  |     B_Y = null; | ||
|  | 
 | ||
|  |     YMouseSw = true; | ||
|  |     DeBugMode = false; | ||
|  | 
 | ||
|  |     Mobj = null; | ||
|  |     M_Xpos = null; | ||
|  |     M_Ypos = null; | ||
|  | 
 | ||
|  | 
 | ||
|  |     constructor(gX, gY, gWidth, gHeight, gTitleH) { | ||
|  |         //宽度 | ||
|  |         Width = gWidth; | ||
|  |         //高度 | ||
|  |         Height = gHeight; | ||
|  |         //标题高度 | ||
|  |         TitleH = gTitleH; | ||
|  | 
 | ||
|  |         //X坐标 | ||
|  |         X = gX; | ||
|  |         //Y坐标 | ||
|  |         Y = gY; | ||
|  | 
 | ||
|  |         if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; | ||
|  |     } | ||
|  | 
 | ||
|  |     //设定鼠标逻辑 | ||
|  |     function LockMouse() { | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) { | ||
|  |             IMouse.LockMouseClick(); | ||
|  |             YMouseSw = false; | ||
|  |         } else { | ||
|  |             if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) { | ||
|  |                 IMouse.ReleaseMouseClick(); | ||
|  |                 YMouseSw = true; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //设定窗口拖动逻辑 | ||
|  |     function MoveWindow() { | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) { | ||
|  | 
 | ||
|  |             if (Mobj.Lb == 1) { | ||
|  |                 if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据 | ||
|  |                 if (!M_Ypos) M_Ypos = IMouse.GetYPos(); | ||
|  |                 if (!B_X) B_X = X; //原始窗口位置 | ||
|  |                 if (!B_Y) B_Y = Y; | ||
|  | 
 | ||
|  |                 X = B_X - (M_Xpos - IMouse.GetXPos()); | ||
|  |                 Y = B_Y - (M_Ypos - IMouse.GetYPos()); | ||
|  | 
 | ||
|  |             } else if (Mobj.Lb == 0) { | ||
|  |                 M_Xpos = null; | ||
|  |                 M_Ypos = null; | ||
|  |                 B_X = null; | ||
|  |                 B_Y = null; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function Show(obj) { | ||
|  |         if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff); | ||
|  | 
 | ||
|  |         //设定鼠标逻辑 | ||
|  |         LockMouse(); | ||
|  | 
 | ||
|  |         //设定窗口拖动逻辑 | ||
|  |         MoveWindow(); | ||
|  | 
 | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | class Fate_Select_SmallPowerCard extends BasicsDrawTool { | ||
|  |     X = 0; | ||
|  |     Y = 0; | ||
|  |     Mobj = null; //鼠标对象 | ||
|  |     TState = null; | ||
|  |     Img = null; | ||
|  |     Idx = null; | ||
|  |     Str = null; | ||
|  |     Name = null; | ||
|  | 
 | ||
|  |     Type = null; | ||
|  |     SkillIndex = null; | ||
|  |     SkillIdx = null; | ||
|  |     SkillValue = null; | ||
|  | 
 | ||
|  |     constructor(gImg, gIdx, gStr, gName, gX, gY, gType, gSkillIndex, gSkillIdx, gSkillValue) { | ||
|  |         this.Img = gImg; | ||
|  |         this.Idx = gIdx; | ||
|  |         this.Str = gStr; | ||
|  |         this.Name = gName; | ||
|  | 
 | ||
|  |         this.Type = gType; | ||
|  |         this.SkillIndex = gSkillIndex; | ||
|  |         this.SkillIdx = gSkillIdx; | ||
|  |         this.SkillValue = gSkillValue; | ||
|  |         this.X = gX; | ||
|  |         this.Y = gY; | ||
|  |         if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"]; | ||
|  |         TState = 0; | ||
|  |     } | ||
|  | 
 | ||
|  |     function SetPower(obj) { | ||
|  |         switch (Type) { | ||
|  |             case 0: | ||
|  |                 AddIntData(obj, SkillIndex, SkillIdx, SkillValue); | ||
|  |                 break; | ||
|  |             case 1: | ||
|  |                 AddLevelData(obj, SkillIndex, SkillIdx, SkillValue); | ||
|  |                 break; | ||
|  |             case 2: | ||
|  |                 AddSkillCoolTime(obj, SkillIndex, SkillValue); | ||
|  |                 break; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function Show(obj) { | ||
|  |         local RootTab = getroottable(); | ||
|  |         if (isInRect()) { | ||
|  |             T_DrawStayAni(obj, "common/dungeon/fate_select/powerframe.ani", X - 21, Y - 26, 0, "powerselect.ani7"); | ||
|  |         } | ||
|  | 
 | ||
|  |         //绘制基础框 | ||
|  |         L_sq_DrawImg("interface2/event/dfo/2021/0323/decisionsuntodestiny/ingameui.img", 6, X - 21, Y - 26); | ||
|  | 
 | ||
|  |         //绘制槽图标 | ||
|  |         L_sq_DrawImg(Img.tolower(), Idx, X + 57, Y + 49); | ||
|  | 
 | ||
|  |         //绘制卡片名字 | ||
|  |         L_sq_DrawCode_Ex(Name, X + 64 - (Name.len() * 2), Y + 106, sq_RGBA(247, 214, 90, 250), 2, 1); | ||
|  | 
 | ||
|  |         //绘制当卡牌描述 | ||
|  |         L_sq_DrawCode_Ex(Str, X + 20, Y + 140, sq_RGBA(150, 255, 30, 250), 0, 1); | ||
|  | 
 | ||
|  |         if (TState == 1) { | ||
|  |             local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/powerselectendframe.ani", X - 41, Y - 26, "fatepowerselectendframe"); | ||
|  |             if (sq_IsEnd(ani)) { | ||
|  |                 sq_Rewind(ani); | ||
|  |                 TState = 2; | ||
|  |                 RootTab["Fate_SelectCObj"].SelectTiming = 3; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //高级绘制文字(带换行) | ||
|  |     function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc) { | ||
|  |         local strarr = []; | ||
|  |         if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc); | ||
|  |         else { | ||
|  |             local Bpos = 0; | ||
|  |             while (true) { | ||
|  |                 local Npos = str.find("\n", Bpos); | ||
|  |                 if (!Npos) { | ||
|  |                     local strbuff = str.slice(Bpos, str.len()); | ||
|  |                     strarr.append(strbuff); | ||
|  |                     break; | ||
|  |                 } | ||
|  |                 local strbuff = str.slice(Bpos, Npos); | ||
|  |                 strarr.append(strbuff); | ||
|  |                 Bpos = Npos + 1; | ||
|  |             } | ||
|  |             for (local z = 0; z < strarr.len(); z++) { | ||
|  |                 L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     //悬停状态 | ||
|  |     function isInRect() { | ||
|  |         if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X, Y, 143, 299)) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  |     //左键按下状态 | ||
|  |     function isLBDown() { | ||
|  |         if (isInRect() && Mobj.Lb == 1) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  |     //左键弹起状态 | ||
|  |     function isLBUp() { | ||
|  |         if (isInRect() && Mobj.Lb == 0) return true; | ||
|  |         else return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     //左键单击状态 | ||
|  |     function isLBActive() { | ||
|  |         if (isInRect() && Mobj.LbEvent) { | ||
|  |             return true; | ||
|  |         } else return false; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | class Fate_SelectC extends BasicsDrawTool { | ||
|  |     WindowObj = null; //窗口对象 | ||
|  |     MainState = false; //主状态 | ||
|  |     X = 0; | ||
|  |     Y = 0; | ||
|  | 
 | ||
|  |     //退出副本执行操作判断 | ||
|  |     ExitIdx = false; | ||
|  |     //副本背景 | ||
|  |     DgnBackground = null; | ||
|  |     //波数时间配置 | ||
|  |     LevelTimeInfo = null; | ||
|  |     //BOSS的ID | ||
|  |     BOSSId = null; | ||
|  |     //当前波数 | ||
|  |     NowLevel = 0; | ||
|  |     //BOSS战 | ||
|  |     BossFight = false; | ||
|  |     //杀死BOSS Flag | ||
|  |     BossFightKillFlag = false; | ||
|  |     //召唤背景 | ||
|  |     BackGroundSummon = false; | ||
|  |     //时间容器对象 | ||
|  |     TimeObj = null; | ||
|  |     //绘制对象时间 | ||
|  |     DrawTime = null; | ||
|  |     //杀怪可获得能力数量 | ||
|  |     KillMonsterRewardCount = 15; | ||
|  |     //杀怪数量 | ||
|  |     KillMonsterCount = 0; | ||
|  | 
 | ||
|  | 
 | ||
|  |     PowerSelect = null; | ||
|  |     SelectTiming = 1; | ||
|  | 
 | ||
|  |     //获取基础配置包回调 | ||
|  |     function GetBaseInfoCallBack(Chunk) { | ||
|  |         local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer"); | ||
|  |         Buffer.Parse(Chunk, 0, false); | ||
|  |         local RootTab = getroottable(); | ||
|  |         if (RootTab.rawin("Fate_SelectCObj")) { | ||
|  |             local Tobj = RootTab["Fate_SelectCObj"]; | ||
|  |             Tobj.LevelTimeInfo = null; | ||
|  |             Tobj.BOSSId = null; | ||
|  |             Tobj.LevelTimeInfo = []; | ||
|  |             Tobj.BOSSId = {}; | ||
|  |             for (local i = 0; i < 50; i++) { | ||
|  |                 local TimeBuf = Buffer.Get("Time->" + i); | ||
|  |                 Tobj.LevelTimeInfo.append(TimeBuf * 1000); | ||
|  |                 local BossId = Buffer.Get("BOSSId->" + i); | ||
|  |                 Tobj.BOSSId.rawset(BossId, true); | ||
|  |             } | ||
|  |             Tobj.KillMonsterRewardCount = Buffer.Get("KillMonsterRewardCount"); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //获取基础配置包 | ||
|  |     function GetBaseInfo() { | ||
|  |         local T = { | ||
|  |             op = 20023001, | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //进入副本标识包 | ||
|  |     function StartDgnIdxPack() { | ||
|  |         local T = { | ||
|  |             op = 20023009, | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //退出副本标识包 | ||
|  |     function EndDgnIdxPack() { | ||
|  |         local T = { | ||
|  |             op = 20023011, | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //获取小技能卡牌 | ||
|  |     function GetSmallPwoerCard(Job, JobGrow) { | ||
|  |         local T = { | ||
|  |             op = 20023003, | ||
|  |             job = Job, | ||
|  |             jobGrow = JobGrow, | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //选择小技能卡牌 | ||
|  |     function SelectSmallPwoerCard(Job, JobGrow) { | ||
|  |         local T = { | ||
|  |             op = 20023005, | ||
|  |             job = Job, | ||
|  |             jobGrow = JobGrow, | ||
|  |         } | ||
|  |         SendPack(T); | ||
|  |     } | ||
|  | 
 | ||
|  |     //获取小技能卡牌回调 | ||
|  |     function GetSmallPwoerCardCallBack(Chunk) { | ||
|  |         local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer"); | ||
|  |         Buffer.Parse(Chunk, 0, false); | ||
|  |         local RootTab = getroottable(); | ||
|  |         if (RootTab.rawin("Fate_SelectCObj")) { | ||
|  |             local Tobj = RootTab["Fate_SelectCObj"]; | ||
|  | 
 | ||
|  |             for (local i = 0; i < 5; i++) { | ||
|  |                 local Img = Buffer.Get("SkillPack->" + i + "->Img"); | ||
|  |                 local Idx = Buffer.Get("SkillPack->" + i + "->Idx"); | ||
|  |                 local Str = Buffer.Get("SkillPack->" + i + "->Str"); | ||
|  |                 local Name = Buffer.Get("SkillPack->" + i + "->Name"); | ||
|  | 
 | ||
|  |                 local Type = Buffer.Get("SkillPack->" + i + "->Type"); | ||
|  |                 local SkillIndex = Buffer.Get("SkillPack->" + i + "->SkillIndex"); | ||
|  |                 local SkillIdx = Buffer.Get("SkillPack->" + i + "->SkillIdx"); | ||
|  |                 local SkillValue = Buffer.Get("SkillPack->" + i + "->SkillValue"); | ||
|  |                 Tobj.PowerSelect[i] = Fate_Select_SmallPowerCard(Img, Idx, Str, Name, 27 + (i * 150), 160, Type, SkillIndex, SkillIdx, SkillValue); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor() { | ||
|  |         //读取基础配置 | ||
|  |         GetBaseInfo(); | ||
|  |         Pack_Control.rawset(20023002, GetBaseInfoCallBack); | ||
|  |         Pack_Control.rawset(20023004, GetSmallPwoerCardCallBack); | ||
|  |         //初始化能力包 | ||
|  |         PowerSelect = [0, 0, 0, 0, 0]; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         /*测试类*/ | ||
|  |         /*********************************************** | ||
|  |          ****************                **************** | ||
|  |          ************************************************/ | ||
|  |         // for (local w = 0; w < 5; w++) { | ||
|  |         //     PowerSelect[w] = Fate_Select_SmallPowerCard("Character/Swordman/Effect/SkillIcon.img", 8, "测试功能描述", "拔刀斩(范围)", 27 + (w * 150), 160, 0, 0, 0, 0); | ||
|  |         // } | ||
|  |         // LevelTimeInfo = []; | ||
|  |         // for (local i = 0; i < 50; i++) { | ||
|  |         //     LevelTimeInfo.append(5000); | ||
|  |         // } | ||
|  |         // BOSSId = {}; | ||
|  |         // BOSSId.rawset(59028, true); | ||
|  |         // BOSSId.rawset(62681, true); | ||
|  |         // BOSSId.rawset(64020, true); | ||
|  |         // BOSSId.rawset(62721, true); | ||
|  |         // BOSSId.rawset(62780, true); | ||
|  | 
 | ||
|  |         for (local i = 0; i < 50; i++) { | ||
|  |             local TimeObj = TimeSTL("FateTimeObj" + i, 1100); | ||
|  |             TimeObj.Delete(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //绘制能力卡牌 | ||
|  |     function DrawPwoerCard(obj) { | ||
|  |         //当卡牌包存在时绘制 | ||
|  |         if (PowerSelect[0] != 0) { | ||
|  |             //世界静止 | ||
|  |             //PauseWorld(obj, 2, 100); | ||
|  |             //绘制标签界面 | ||
|  |             T_DrawStayAni(obj, "common/dungeon/fate_select/powerselectmain.ani", 88, 40, 0, "fatepowerselectmain"); | ||
|  |             //光 | ||
|  |             T_DrawStayAni(obj, "common/dungeon/fate_select/goldselectframe.ani", 0, 0, 1, "powerselectmainlight"); | ||
|  |             //绘制能力选择卡牌 | ||
|  |             local RootTab = getroottable(); | ||
|  |             for (local i = 0; i < 5; i++) { | ||
|  |                 PowerSelect[i].Show(obj); | ||
|  |                 //常驻检测 | ||
|  |                 if (PowerSelect[i].isLBActive() && SelectTiming == 1) { | ||
|  |                     SelectTiming = 2; | ||
|  |                     PowerSelect[i].TState = 1; | ||
|  |                     PowerSelect[i].SetPower(obj); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         //当能力选择后销毁卡牌包 | ||
|  |         if (SelectTiming == 3) { | ||
|  |             PowerSelect = null; | ||
|  |             PowerSelect = [0, 0, 0, 0, 0]; | ||
|  |             SelectTiming = 1; | ||
|  |             //选择小技能卡牌 | ||
|  |             SelectSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制副本背景 | ||
|  |     function DrawDgnBackground(obj) { | ||
|  |         if (DgnBackground == null) { | ||
|  | 
 | ||
|  |             CreatFateSelectPassObject(obj, 0); | ||
|  |             DgnBackground = 0; | ||
|  |             //进入副本标识包 | ||
|  |             StartDgnIdxPack(); | ||
|  |             //进入副本重置Exit标识 | ||
|  |             ExitIdx = true; | ||
|  | 
 | ||
|  |             //第一次获取小技能能力 | ||
|  |             GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制UI | ||
|  |     function DrawFateUI(obj) { | ||
|  |         //固定绘制右上角MainUI | ||
|  |         { | ||
|  |             //绘制UI | ||
|  |             T_DrawStayAni(obj, "common/dungeon/fate_select/rightmain.ani", 537, 0, 0, "fate_selectRIGHTmain"); | ||
|  |             //绘制波数 | ||
|  |             DrawCustomNum(obj, 759 + ((NowLevel.tostring().len() - 1) * 6), 20, NowLevel, "common/dungeon/fate_select/num/", 1, -16); | ||
|  | 
 | ||
|  |             //判断是否BOSS战 | ||
|  |             if (NowLevel != 0 && (NowLevel % 10) == 9) { | ||
|  |                 T_DrawStayAni(obj, "common/dungeon/fate_select/new/boss.ani", 539, 2, 0, "fate_selectBoss战"); | ||
|  |             } else { | ||
|  |                 if (!DrawTime) return; | ||
|  |                 local TimeStr = (DrawTime / 10).tostring(); | ||
|  |                 if (TimeStr.len() == 3) TimeStr = "0" + TimeStr; | ||
|  |                 if (TimeStr.len() == 2) TimeStr = "00" + TimeStr; | ||
|  |                 if (TimeStr.len() == 1) TimeStr = "000" + TimeStr; | ||
|  |                 //绘制时间 | ||
|  |                 fateDrawCustomTimeNum(obj, 759 - 48, 22, TimeStr, "common/dungeon/fate_select/num2/", 12, -16); | ||
|  |             } | ||
|  | 
 | ||
|  |             //绘制杀怪数量 | ||
|  |             DrawCustomNum(obj, 759 - 15, 102, (KillMonsterRewardCount - KillMonsterCount), "common/dungeon/fate_select/num2/", -5, -16); | ||
|  |             //获取能力发包并且减少一次杀敌数 | ||
|  |             if (KillMonsterCount >= KillMonsterRewardCount) { | ||
|  |                 KillMonsterCount -= KillMonsterRewardCount; | ||
|  |                 //获取小技能能力 | ||
|  |                 GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj)); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //同步时间 | ||
|  |     function SyncTime(obj) { | ||
|  |         if (NowLevel < 50) { | ||
|  |             local Time = LevelTimeInfo[NowLevel]; | ||
|  |             if (TimeObj) { | ||
|  |                 local Nt = TimeObj.Get(); | ||
|  |                 //时间到 切波数 | ||
|  |                 if (Nt == Time) { | ||
|  |                     TimeObj.Delete(); | ||
|  |                     TimeObj = null; | ||
|  | 
 | ||
|  |                     NowLevel++; | ||
|  |                 } else { | ||
|  |                     DrawTime = Time - Nt; | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 //更换地图 | ||
|  |                 if ((NowLevel % 10) == 9 && NowLevel != 0) { | ||
|  |                     //开始遭遇BOSS战 | ||
|  |                     if (!BossFight) { | ||
|  |                         //出怪 | ||
|  |                         sq_SendCreatePassiveObjectPacketPos(obj, 101400 + NowLevel, 0, 0, 0, 0); | ||
|  |                         BossFight = true; | ||
|  |                     } | ||
|  |                     //如果杀死BOSS | ||
|  |                     if (BossFightKillFlag) { | ||
|  |                         local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/cg/124.ani", 400, 300, "命运的抉择过场cg"); | ||
|  |                         if (sq_GetAnimationFrameIndex(ani) >= 16 && BackGroundSummon == false) //当发光ani黑时 | ||
|  |                         { | ||
|  |                             DestroyFateSelectPassObject(obj, (NowLevel / 9) - 1); //销毁上一个图 | ||
|  |                             CreatFateSelectPassObject(obj, (NowLevel / 9)); //创建下一个图 | ||
|  |                             BackGroundSummon = true; | ||
|  |                         } | ||
|  |                         if (sq_IsEnd(ani)) { | ||
|  |                             NowLevel++; | ||
|  |                             BossFightKillFlag = false; | ||
|  |                             BackGroundSummon = false; | ||
|  |                             BossFight = false; | ||
|  |                             sq_Rewind(ani); | ||
|  |                         } | ||
|  |                     } | ||
|  |                 } else { | ||
|  |                     TimeObj = TimeSTL("FateTimeObj" + NowLevel, Time); | ||
|  |                     TimeObj.Start(); | ||
|  | 
 | ||
|  |                     //出怪 | ||
|  |                     sq_SendCreatePassiveObjectPacketPos(obj, 101400 + NowLevel, 0, 0, 0, 0); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         if (NowLevel == 50) { | ||
|  |             L_sq_GoTown(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //遍历怪物死亡 | ||
|  |     function SyncMonsterDie(obj) { | ||
|  |         local objectManager = obj.getObjectManager(); | ||
|  |         local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); | ||
|  |         for (local i = 0; i < CollisionObjectNumber; i += 1) { | ||
|  |             local object = objectManager.getCollisionObject(i); | ||
|  |             if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && object.getTeam() != 0) { | ||
|  |                 local activeObj = sq_GetCNRDObjectToActiveObject(object); | ||
|  |                 local MonDieSoundIndex = activeObj.getCollisionObjectIndex(); | ||
|  |                 local UUID = sq_GetUniqueId(activeObj); | ||
|  |                 if (activeObj.isDead()) { | ||
|  |                     if (!getroottable().rawin("fate_select" + UUID)) { | ||
|  |                         if (BOSSId.rawin(MonDieSoundIndex)) { | ||
|  |                             KillMonsterCount += 15; | ||
|  |                             //BOSS击杀标识 | ||
|  |                             BossFightKillFlag = true; | ||
|  |                         } | ||
|  |                         KillMonsterCount++; | ||
|  |                         getroottable().rawset("fate_select" + UUID, true); | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //副本销毁程序 | ||
|  |     function DgnExit(obj) { | ||
|  |         DgnBackground = null; | ||
|  |         KillMonsterCount = 0; | ||
|  |         NowLevel = 0; | ||
|  |         //退出副本标识包 | ||
|  |         EndDgnIdxPack(); | ||
|  |         //销毁技能提升 | ||
|  |         local RootTab = getroottable(); | ||
|  |         if (RootTab.rawin("LenheartSkillManager")) { | ||
|  |             RootTab.rawdelete("LenheartSkillManager"); | ||
|  |         } | ||
|  |         ExitIdx = false; | ||
|  | 
 | ||
|  |         BossFight = false; | ||
|  |         //杀死BOSS Flag | ||
|  |         BossFightKillFlag = false; | ||
|  |         //召唤背景 | ||
|  |         BackGroundSummon = false; | ||
|  |         //时间容器对象 | ||
|  |         TimeObj = null; | ||
|  |         //绘制对象时间 | ||
|  |         DrawTime = null; | ||
|  | 
 | ||
|  |         SelectTiming = 1; | ||
|  |     } | ||
|  |     //副本逻辑程序 | ||
|  |     function DgnProc(obj) { | ||
|  |         local stage = sq_GetGlobaludpModuleStage(); | ||
|  |         local dungeon = sq_GetDungeonByStage(stage); | ||
|  |         local dungeonIndex = sq_GetDuegonIndex(dungeon); | ||
|  |         if (dungeonIndex != 23048) { | ||
|  |             if (ExitIdx == true) DgnExit(obj); | ||
|  |             return; | ||
|  |         } else { | ||
|  |             if (sq_GetCurrentModuleType() == 3) { | ||
|  |                 //绘制副本背景 | ||
|  |                 DrawDgnBackground(obj); | ||
|  |                 //绘制UI | ||
|  |                 DrawFateUI(obj); | ||
|  |                 //同步时间 | ||
|  |                 SyncTime(obj); | ||
|  |                 //遍历怪物死亡 | ||
|  |                 SyncMonsterDie(obj); | ||
|  |                 //绘制能力卡牌 | ||
|  |                 DrawPwoerCard(obj); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //逻辑入口 | ||
|  |     function Proc(obj) { | ||
|  |         if (KeyPressNB.isKeyPress(48, "Fate_SelectCloseKey")) { | ||
|  |             MainState = false; | ||
|  |         } | ||
|  |         DgnProc(obj); | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawCustomNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { | ||
|  |         local len = (num.tostring()).len(); | ||
|  |         for (local i = 0; i < len; i++) { | ||
|  |             local one = 0; | ||
|  |             local DrawNum = (num.tostring()).slice(i, i + 1); | ||
|  |             if (i != (len - 1)) one += OneDeviation * abs(i - (len - 1)); | ||
|  |             local ani = obj.getVar().GetAnimationMap(DrawNum + str, str + DrawNum + ".ani"); | ||
|  |             sq_AnimationProc(ani); | ||
|  |             sq_drawCurrentFrame(ani, xPos + (i * Interval) + one, yPos, true); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function fateDrawCustomTimeNum(obj, xPos, yPos, num, str, Interval, OneDeviation) { | ||
|  | 
 | ||
|  |         for (local i = 0; i < 4; i++) { | ||
|  |             local Idx = num.slice(0 + i, 1 + i); | ||
|  |             local ani = obj.getVar().GetAnimationMap(Idx + str, str + Idx + ".ani"); | ||
|  |             sq_AnimationProc(ani); | ||
|  |             sq_drawCurrentFrame(ani, xPos + ((i - 4) * 14) + ((i / 2) * 18) - 10, yPos, true); | ||
|  |         } | ||
|  |         T_DrawStayAni(obj, "common/dungeon/fate_select/dian.ani", xPos - 146, yPos - 34, 0, "fatedian"); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     function PauseWorld(obj, Type, Time) { | ||
|  |         local objectManager = obj.getObjectManager(); | ||
|  |         for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) { | ||
|  |             local object = objectManager.getCollisionObject(i); | ||
|  |             sq_SetPause(object, Type, Time); | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     function CreatFateSelectPassObject(obj, sc) { | ||
|  |         switch (sc) { | ||
|  |             case 0: | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102500, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102501, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102502, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102503, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102504, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102505, 0, 0, 0, 0); | ||
|  | 
 | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 391, 340, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 1013, 0, 538, 340, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1234, 193, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1004, 215, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 619, 255, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 607, 583, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 588, 591, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 583, 323, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 280, 202, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1072, 298, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 479, 335, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 356, 360, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 474, 363, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 614, 341, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 565, 344, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 431, 346, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 322, 366, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 494, 374, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 540, 370, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 1, 228, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 6, 435, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 1031, 468, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 990, 462, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 1067, 453, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1009, 444, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1133, 481, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 943, 482, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1047, 506, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 221, 0, 157, 575, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 282, 457, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 427, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 263, 390, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 375, 427, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 863, 434, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1025, 447, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 905, 492, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 410, 315, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 72, 422, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 103, 584, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 526, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 657, 259, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 571, 597, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 608, 597, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1060, 538, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1113, 444, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1092, 543, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1012, 543, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 148, 512, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 228, 549, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 65, 397, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 175, 439, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 280, 396, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 652, 190, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 217, 164, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 345, 202, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 1014, 199, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 1023, 206, 0); | ||
|  |                 break; | ||
|  |             case 1: | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102515, 0, 0, -40, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102510, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102511, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102513, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102514, 0, 0, 0, 0); | ||
|  | 
 | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 868, 0, 591, 835, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 502, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 562, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 622, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 802, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 862, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 922, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1102, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1162, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1222, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 1020, 705, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 713, 719, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1540, 240, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1560, 394, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1541, 551, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -180, 293, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -7, 360, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 26, 508, 0); | ||
|  |                 break; | ||
|  |             case 2: | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102525, 0, 0, -40, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102520, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102521, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102522, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102523, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102524, 0, 0, 80, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102526, 0, 0, 80, 0); | ||
|  | 
 | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10658, 0, 1699, 146, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 284, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 15096, 0, 1582, 526, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 391, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1620, 477, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1619, 419, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 7, 186, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10672, 0, -39, 511, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 1540, 351, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 189, 573, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 274, 691, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 222, 659, 0); | ||
|  |                 break; | ||
|  |             case 3: | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102535, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102530, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102531, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102534, 0, 0, 120, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102536, 0, 0, 120, 0); | ||
|  | 
 | ||
|  |                 local YP = 120; | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8959, 0, 266, 151 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -46, 582 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, 3, 130 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -99, 485 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1072, 153 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1039, 144 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 483, 572 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 503, 592 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 411, 568 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 777, 136 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 673, 137 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1574, 265 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1526, 195 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1553, 533 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1538, 516 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1440, 160 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 393, 141 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 139, 154 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 543, 598 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 464, 587 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1511, 211 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1500, 186 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1528, 546 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10152, 0, 985, 137 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 860, 155 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1323, 150 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 491, 138 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 538, 153 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 607, 148 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 638, 160 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1555, 312 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 405, 596 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1126, 157 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1163, 146 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 1239, 126 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1354, 153 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1543, 298 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 907, 138 + YP, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1573, 505 + YP, 0); | ||
|  |                 break; | ||
|  |             case 4: | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102545, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102540, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102541, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102542, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102543, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 102546, 0, 0, 120, 0); | ||
|  | 
 | ||
|  | 
 | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 0, 260, 100); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 640, 260, 100); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 1280, 260, 100); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 0, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 23, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 24, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 200, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 200, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 200, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 291, 165, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 10, 182, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 780, 159, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1244, 601, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 681, 170, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 918, 169, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10245, 0, 648, 603, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1066, 165, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 577, 263, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 1251, 264, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 544, 323, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 331, 619, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1269, 352, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 441, 608, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 213, 385, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1250, 546, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 953, 615, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 894, 599, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 1155, 164, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 1528, 141, 0); | ||
|  |                 sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 1513, 157, 0); | ||
|  |                 break; | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //销毁特效 | ||
|  |     function DestroyPassiveObject(obj, Index) { | ||
|  |         local ballCount = obj.getMyPassiveObjectCount(Index); | ||
|  |         for (local i = 0; i < ballCount; ++i) { | ||
|  |             local magicBall = obj.getMyPassiveObject(Index, i) | ||
|  |             if (!magicBall) | ||
|  |                 continue; | ||
|  |             sq_SendDestroyPacketPassiveObject(magicBall); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function DestroyFateSelectPassObject(obj, sc) { | ||
|  |         switch (sc) { | ||
|  |             case 0: | ||
|  |                 DestroyPassiveObject(obj, 102500); | ||
|  |                 DestroyPassiveObject(obj, 102501); | ||
|  |                 DestroyPassiveObject(obj, 102502); | ||
|  |                 DestroyPassiveObject(obj, 102503); | ||
|  |                 DestroyPassiveObject(obj, 102504); | ||
|  |                 DestroyPassiveObject(obj, 102505); | ||
|  | 
 | ||
|  |                 DestroyPassiveObject(obj, 1012); | ||
|  |                 DestroyPassiveObject(obj, 1013); | ||
|  |                 DestroyPassiveObject(obj, 261); | ||
|  |                 DestroyPassiveObject(obj, 248); | ||
|  |                 DestroyPassiveObject(obj, 247); | ||
|  |                 DestroyPassiveObject(obj, 3000); | ||
|  |                 DestroyPassiveObject(obj, 3004); | ||
|  |                 DestroyPassiveObject(obj, 292); | ||
|  |                 DestroyPassiveObject(obj, 221); | ||
|  |                 break; | ||
|  |             case 1: | ||
|  |                 DestroyPassiveObject(obj, 102510); | ||
|  |                 DestroyPassiveObject(obj, 102511); | ||
|  |                 DestroyPassiveObject(obj, 102512); | ||
|  |                 DestroyPassiveObject(obj, 102513); | ||
|  |                 DestroyPassiveObject(obj, 102514); | ||
|  |                 DestroyPassiveObject(obj, 102515); | ||
|  | 
 | ||
|  |                 DestroyPassiveObject(obj, 868); | ||
|  |                 DestroyPassiveObject(obj, 869); | ||
|  |                 DestroyPassiveObject(obj, 109006950); | ||
|  |                 DestroyPassiveObject(obj, 109006947); | ||
|  |                 break; | ||
|  |             case 2: | ||
|  |                 DestroyPassiveObject(obj, 102520); | ||
|  |                 DestroyPassiveObject(obj, 102521); | ||
|  |                 DestroyPassiveObject(obj, 102522); | ||
|  |                 DestroyPassiveObject(obj, 102523); | ||
|  |                 DestroyPassiveObject(obj, 102524); | ||
|  |                 DestroyPassiveObject(obj, 102525); | ||
|  |                 DestroyPassiveObject(obj, 102526); | ||
|  | 
 | ||
|  |                 DestroyPassiveObject(obj, 10658); | ||
|  |                 DestroyPassiveObject(obj, 10681); | ||
|  |                 DestroyPassiveObject(obj, 15096); | ||
|  |                 DestroyPassiveObject(obj, 10672); | ||
|  |                 DestroyPassiveObject(obj, 15095); | ||
|  |                 DestroyPassiveObject(obj, 10671); | ||
|  |                 DestroyPassiveObject(obj, 10675); | ||
|  |                 break; | ||
|  |             case 3: | ||
|  |                 DestroyPassiveObject(obj, 102530); | ||
|  |                 DestroyPassiveObject(obj, 102531); | ||
|  |                 DestroyPassiveObject(obj, 102534); | ||
|  |                 DestroyPassiveObject(obj, 102535); | ||
|  |                 DestroyPassiveObject(obj, 102536); | ||
|  | 
 | ||
|  |                 DestroyPassiveObject(obj, 8959); | ||
|  |                 DestroyPassiveObject(obj, 10232); | ||
|  |                 DestroyPassiveObject(obj, 8963); | ||
|  |                 DestroyPassiveObject(obj, 10151); | ||
|  |                 DestroyPassiveObject(obj, 10150); | ||
|  |                 DestroyPassiveObject(obj, 10152); | ||
|  |                 DestroyPassiveObject(obj, 8453); | ||
|  |                 DestroyPassiveObject(obj, 8960); | ||
|  |                 DestroyPassiveObject(obj, 109002769); | ||
|  |                 break; | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | function Fate_Select(obj) { | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("Fate_SelectCObj")) { | ||
|  |         local Cobj = Fate_SelectC(); | ||
|  |         RootTab.rawset("Fate_SelectCObj", Cobj); | ||
|  |     } else { | ||
|  |         RootTab["Fate_SelectCObj"].Proc(obj); | ||
|  |     } | ||
|  | } |