/* 文件名:Rindro_Fiendwar.nut 路径:Project/Fiendwar/Rindro_Fiendwar.nut 创建日期:2024-08-13 09:30 文件用途:超时空 */ dofile("sqr/Project/Fiendwar/FiendFightLogic.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut"); dofile("sqr/Project/Fiendwar/FiendwarHallGoBossDgn.nut"); dofile("sqr/Project/Fiendwar/FiendwarFightSituation.nut"); dofile("sqr/Project/Fiendwar/FiendwarNoti.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_Party.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut"); dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut"); dofile("sqr/Project/Fiendwar/FiendReward.nut"); //超时空核心数据类 class RinDro_Fiendwar extends Rindro_BaseToolClass { //基础配置 BaseConfig = null; //攻坚配置 FightConfig = null; //我的攻坚队状态 MyRaidState = null; //我的攻坚队伍 MyRaidTeam = null; //我的攻坚队伍ID MyRaidTeamId = null; //我的Cid MyCid = null; //我是否是攻坚队队长 IsCaptain = null; //结束时间 EndTime = null; //我的攻坚队攻坚阶段 RaidStage = 0; //我的攻坚队伍头像存储 Portrait = null; //超时空我的队伍窗口 PartyWindow_Object = null; //攻坚战况表窗口 FightSituationWindow_Object = null; //攻坚大厅窗口 PartyHallWindow_Object = null; //翻牌奖励窗口 RewardWindow_Object = null; //编队窗口 PartyFormationWindow_Object = null; //攻坚开始动画的Flag DrawStartAniMark = false; //请求基础信息配置 function GetFiendwarBase() { local T = { op = 20063501, } SendPackEx(T); } //请求掉线配置信息 function GetFiendwarDown() { local T = { op = 20063063, } SendPackEx(T); } //基础信息配置 function FiendwarBase(Chunk) { BaseConfig = Json.Decode(Chunk); FiendwarChannelTownLogicCallBack(); } //基础攻坚信息配置 function FiendwarFightBase(Chunk) { FightConfig = Json.Decode(Chunk); } //团本专属频道上线城镇移动包 function FiendwarChannelTownLogicCallBack() { if (BaseConfig.channel_index.find("20")) { if (L_sq_GetTownIndex() != BaseConfig.town_index) { L_sq_MoveTown(BaseConfig.town_index, 0, 474, 249); } } else { //在超时空区域的 要转移回普通城镇 if (L_sq_GetTownIndex() == BaseConfig.town_index) { L_sq_MoveTown(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249); } } } //获取攻坚队信息回调 function GetTeamInfoCallBack(Chunk) { local Jso = Json.Decode(Chunk); local ZlibStr = Jso.ZipS; Jso.ZipS = Json.Decode(L_sq_Dezlib(Jso.ZipS)); Jso.team <- Jso.ZipS.team; //取的窗口对象 local Win = PartyWindow_Object; Win.InfoFlag = true; //如果攻坚队伍信息中已经有了角色成员 清空成员对象集合 for (local i = 0; i< Win.Childrens.len(); i++) { local Cobj = Win.Childrens[i]; if (Cobj instanceof Rindro_FiendwarPartyInfoMemberC) { Win.Childrens.remove(i); i--; } } //重置成员数组 Win.MembersList = []; //清空是否为我的队伍状态 Win.IsMyTeam = false; //清空是否为队长状态 Win.IsCaptain = false; //赋值队伍名称 Win.TeamName = Jso.team.TeamName; //赋值队伍ID Win.TeamID = Jso.team.TeamId; //还原头像 Portrait = {}; //遍历Team包 用于构造队伍窗口中的每一位成员 foreach(_index, MemberObj in Jso.team.characNum) { // for (local i = 0; i< 8; i++) { // local MemberObj = Jso.team.characNum[0]; // local MemberObj = Jso.team.characNum[0]; //说明我在这个攻坚队里 if (Jso.cid == MemberObj.CID) { Win.IsMyTeam = true; MyRaidState = Jso.team.State; MyRaidTeam = PartyWindow_Object; //向全局类存入我的攻坚队伍ID MyRaidTeamId = Jso.team.TeamId; //存入我的CID MyCid = Jso.cid; //说明是队长 if (Jso.cid == Jso.team.captainCid) { Win.IsCaptain = true; //存入我是攻坚队队长 IsCaptain = true; } } //构造CID对应的装备数组方便绘制 Portrait.rawset(MemberObj.CID, { EquVos = clone(MemberObj.equVos), Job = MemberObj.PlayerJob, TeamId = MemberObj.characNum + 1, Name = MemberObj.PlayerName, }); local T = { PartyId = Jso.team.TeamId, //攻坚队ID TeamId = MemberObj.characNum + 1, //小队编号 Level = MemberObj.PlayerLevel.tostring(), //等级 Name = MemberObj.PlayerName, //名字 JobName = MemberObj.PlayerGrowTypeJob, //职业名 Job = MemberObj.PlayerJob, //职业编号 StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料 EquVos = MemberObj.equVos, //装备List 用于显示头像 Captain = MemberObj.CaptainBool, //是否为攻坚队队长 Cid = MemberObj.CID, //Cid OnlineState = MemberObj.onLineStart, //在线状态 ExitTime = MemberObj.exitTime, //离队时间 PlayerSession = MemberObj.PlayerSession, //玩家在世界中的Session 用于进行原生用户操作 ClearanceCount = MemberObj.ClearanceCount, //通关次数 ClearanceCountMax = FightConfig.rewardCondition, //总通关次数 } //通过类构造并添加队伍成员UI对象 local TeamBuf = Rindro_FiendwarPartyInfoMemberC(T); Win.AddChild(TeamBuf); Win.MembersList.append(TeamBuf); } if (("OpenWin" in Jso)) { //开启队伍窗口显示 Win.Visible = true; //设置置顶 Win.ResetFocus(); } } //攻坚队攻坚开始回调 function RaidStartFightCallBack(Chunk) { local Jso = Json.Decode(Chunk); RaidStage = 1; MyRaidState = 1; //在获取一下攻坚队信息 local Jso = { op = 20063011 } SendPackEx(Jso); } //结束时间 EndTime = null; //上次刷新信息包的时间 PackCurT = null; //攻坚队信息包 function RaidFightInfoCallBack(Chunk) { PackCurT = Clock(); local Info = Json.Decode(Chunk).fightInfo; EndTime = Info.endTime; if (FightSituationWindow_Object) FightSituationWindow_Object.InitInfo(Info); //如果存在 if (MyRaidTeam && MyRaidTeam.InfoFlag) { for (local i = 0; i< MyRaidTeam.MembersList.len(); i++) { local PInfo = MyRaidTeam.MembersList[i].InfoObj; local CID = PInfo.Cid; local Flag = false; foreach(scid in Info.Standby) { if (scid == CID) Flag = true; } if (Flag) { MyRaidTeam.MembersList[i].InfoObj.Standby <- true; } else { MyRaidTeam.MembersList[i].InfoObj.Standby <- false; } } } } //收到奖励包 function RaidRewardInfoCallBack(Chunk) { local Info = Json.Decode(Chunk); RewardWindow_Object.Init(Info); } //收到初始化包 function RaidInitCallBack(Chunk) { //我的攻坚队状态 MyRaidState = null; //我的攻坚队伍 MyRaidTeam = null; //我的攻坚队伍ID MyRaidTeamId = null; //我的Cid MyCid = null; //我是否是攻坚队队长 IsCaptain = null; //结束时间 EndTime = null; //我的攻坚队攻坚阶段 RaidStage = 0; //我的攻坚队伍头像存储 Portrait = null; //超时空我的队伍窗口 PartyWindow_Object.DestroyWindow(); //攻坚战况表窗口 FightSituationWindow_Object.DestroyWindow(); //攻坚大厅窗口 PartyHallWindow_Object.DestroyWindow(); //翻牌奖励窗口 RewardWindow_Object.DestroyWindow(); //编队窗口 PartyFormationWindow_Object.DestroyWindow(); //超时空我的队伍窗口 PartyWindow_Object = null; //攻坚战况表窗口 FightSituationWindow_Object = null; //攻坚大厅窗口 PartyHallWindow_Object = null; //翻牌奖励窗口 RewardWindow_Object = null; //编队窗口 PartyFormationWindow_Object = null; } MonsterFMap = [202210052, 202210053, 202210054, 202210055]; //火山怪物投放包 function MonsterSendCallBack(Chunk) { local Info = Json.Decode(Chunk); if (sq_GetCurrentModuleType() == 3) { local obj = sq_GetMyMasterCharacter(); obj = sq_ObjectToSQRCharacter(obj); obj.sq_SendCreatePassiveObjectPacket(MonsterFMap[Info.id], 0, 120, 1, 0); } } constructor() { // DrawStartAniMark = true; // DrawStartAniT = Clock(); Pack_Control.rawset(20063028, RaidStartFightCallBack.bindenv(this)); Pack_Control.rawset(20063016, RaidFightInfoCallBack.bindenv(this)); Pack_Control.rawset(20063004, GetTeamInfoCallBack.bindenv(this)); Pack_Control.rawset(20063036, FiendwarFightBase.bindenv(this)); //攻坚奖励包 Pack_Control.rawset(20063026, RaidRewardInfoCallBack.bindenv(this)); //初始化包 退出队伍 或者 被 请出队伍 Pack_Control.rawset(20063008, RaidInitCallBack.bindenv(this)); //火山怪物投放 Pack_Control.rawset(20063050, MonsterSendCallBack.bindenv(this)); //绘制动画包 Pack_Control.rawset(20063038, RaidPlayAniCallBack.bindenv(this)); //获取基础配置回调包 Pack_Control.rawset(20063502, FiendwarBase.bindenv(this)); //第一次上线要重新请求一下位置信息 GetFiendwarBase(); //看看是否有断线重连 GetFiendwarDown(); FiendFightLogicC_Object = FiendFightLogicC(); } FiendFightLogicC_Object = null; function Proc(obj) { PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "新超时空攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18); PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 375, 190, 294, 192, 18); FightSituationWindow_Object = LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 770, 600, 0); PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyInfoC, "超时空我的队伍窗口", 6, 15, 354, 566 - 255, 18); RewardWindow_Object = LenheartNewUI_CreateWindow(FiendRewardC, "超时空翻牌奖励窗口", 0, 0, 0, 0, 0); LenheartNewUI_CreateWindow(FiendwarNotiC, "超时空攻坚队伍消息分发", 0, 0, 0, 0, 0); if (FightSituationWindow_Object) FightSituationWindow_Object.TopDraw(obj); //绘制动画 DrawPlayAni(obj); if (FiendFightLogicC_Object) FiendFightLogicC_Object.Proc(obj); } DrawPlayAniMark = null; DrawPlayAniT = null; function RaidPlayAniCallBack(Chunk) { local Jso = Json.Decode(Chunk); DrawPlayAniMark = Jso.type; DrawPlayAniT = Clock(); } //绘制通关副本动画 function DrawPlayAni(obj) { if (!DrawPlayAniMark || !DrawPlayAniT) return; local Offset = 0; if (getroottable().Rindro_Scr_Width > 800) Offset = ((getroottable().Rindro_Scr_Width - 800) / 2); local Ct = Clock() - DrawPlayAniT; switch (DrawPlayAniMark) { case 1: //通关擎天A case 2: //通关擎天B case 13: //通关擎天B local Ani = T_DrawDynamicAni(obj, "common/anton/title/04_clear_back.ani", 0 + Offset, 180, "超时空通关擎天A" + DrawPlayAniT); local str = "擎天之柱A"; if (DrawPlayAniMark == 2) str = "擎天之柱B" if (DrawPlayAniMark == 13) str = "黑色火山" if (Ct >= 350 && Ct <= 1400) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 244, sq_RGBA(255, 146, 0, 250), 0, 1); break; case 5: T_DrawDynamicAni(obj, "common/luke/newtile/00_start_back.ani", 401 + Offset, 210 + 26, "超时空阻截开始" + DrawPlayAniT); break; case 6: T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back.ani", 401 + Offset, 210 + 26, "超时空阻截成功" + DrawPlayAniT); break; case 7: T_DrawDynamicAni(obj, "common/luke/newtile/01_fail_back.ani", 401 + Offset, 210 + 26, "超时空阻截失败" + DrawPlayAniT); break; case 8: T_DrawDynamicAni(obj, "common/luke/newtile/00_start_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀开始" + DrawPlayAniT); break; case 9: T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀成功" + DrawPlayAniT); break; case 10: T_DrawDynamicAni(obj, "common/luke/newtile/01_fail_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀失败" + DrawPlayAniT); break; case 11: case 12: T_DrawDynamicAni(obj, "common/anton/title/03_warning_back.ani", 0 + Offset, 210 + 26, "超时空火山警告" + DrawPlayAniT); local str = "火山能量即将过载,请立即前往压制!!!"; if (DrawPlayAniMark == 12) str = "震颤的大地已经复活,请立即前往压制!!!" if (Ct >= 350 && Ct <= 1600) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 320, sq_RGBA(255, 50, 50, 250), 0, 1); break; default: break; } if (Ct >= 3000) { DrawPlayAniMark = null; DrawPlayAniT = null; } } } getroottable().rawdelete("RinDro_Fiendwar_Obj"); function Lenheart_Rindro_Fiendwar_New(obj) { local RootTab = getroottable(); if (!RootTab.rawin("RinDro_Fiendwar_Obj")) { RootTab.rawset("RinDro_Fiendwar_Obj", RinDro_Fiendwar()); } else { RootTab["RinDro_Fiendwar_Obj"].Proc(obj); } } if (getroottable().rawin("LenheartTopFuncTab")) { getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Fiendwar_NewFunc", Lenheart_Rindro_Fiendwar_New); } else { local T = {}; T.rawset("Lenheart_Rindro_Fiendwar_NewFunc", Lenheart_Rindro_Fiendwar_New); getroottable().rawset("LenheartTopFuncTab", T); }