/* 文件名: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); } }