/* 文件名:Rindro_Luke.nut 路径:Project/Luke/Rindro_Luke.nut 创建日期:2024-08-13 09:30 文件用途:卢克 */ dofile("sqr/Project/Luke/Rindro_Luke_CreateParty.nut"); dofile("sqr/Project/Luke/Rindro_Luke_FightSituation.nut"); dofile("sqr/Project/Luke/Rindro_Luke_Noti.nut"); dofile("sqr/Project/Luke/Rindro_Luke_Party.nut"); dofile("sqr/Project/Luke/Rindro_Luke_PartyApplyJoin.nut"); dofile("sqr/Project/Luke/Rindro_Luke_PartyFormation.nut"); dofile("sqr/Project/Luke/Rindro_Luke_PartyHall.nut"); dofile("sqr/Project/Luke/Rindro_Luke_PartyInfo.nut"); dofile("sqr/Project/Luke/Rindro_Luke_PartyMemberInfo.nut"); dofile("sqr/Project/Luke/Rindro_Luke_PlayerInteractive.nut"); dofile("sqr/Project/Luke/Rindro_Luke_Reward.nut"); //卢克核心数据类 class RinDro_Luke 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 = 20084501, } SendPackEx(T); } //请求掉线配置信息 function GetFiendwarDown() { local T = { op = 20084063, } SendPackEx(T); } //基础信息配置 function FiendwarBase(Chunk) { BaseConfig = Json.Decode(Chunk); FiendwarChannelTownLogicCallBack(); } //基础攻坚信息配置 function LukeFightBase(Chunk) { FightConfig = Json.Decode(Chunk); } //团本专属频道上线城镇移动包 function FiendwarChannelTownLogicCallBack() { if (BaseConfig.channel_index.find("19")) { 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(1, 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_LukePartyInfoMemberC) { 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, Name = MemberObj.PlayerName, }); local T = { PartyId = Jso.team.TeamId, //攻坚队ID TeamId = MemberObj.characNum, //小队编号 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_LukePartyInfoMemberC(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 = Jso.state; MyRaidState = Jso.state; //在获取一下攻坚队信息 local Jso = { op = 20084011 } 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(20084028, RaidStartFightCallBack.bindenv(this)); Pack_Control.rawset(20084016, RaidFightInfoCallBack.bindenv(this)); Pack_Control.rawset(20084004, GetTeamInfoCallBack.bindenv(this)); Pack_Control.rawset(20084036, LukeFightBase.bindenv(this)); //攻坚奖励包 Pack_Control.rawset(20084026, RaidRewardInfoCallBack.bindenv(this)); //初始化包 退出队伍 或者 被 请出队伍 Pack_Control.rawset(20084008, RaidInitCallBack.bindenv(this)); //火山怪物投放 Pack_Control.rawset(20084050, MonsterSendCallBack.bindenv(this)); //绘制动画包 Pack_Control.rawset(20084038, RaidPlayAniCallBack.bindenv(this)); //获取基础配置回调包 Pack_Control.rawset(20084502, FiendwarBase.bindenv(this)); //第一次上线要重新请求一下位置信息 GetFiendwarBase(); //看看是否有断线重连 GetFiendwarDown(); } function Proc(obj) { PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_PartyHallC, "新卢克攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18); PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyFormation, "卢克我的队伍编队窗口", 375, 190, 294, 192, 18); FightSituationWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukeFightSituationC, "卢克攻坚战况表", ((getroottable().Rindro_Scr_Width - 800) / 2).tointeger(), 8, 800, 600, 0); PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyInfoC, "卢克我的队伍窗口", 6, 15, 354, 566, 18); RewardWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_RewardC, "卢克翻牌奖励窗口", 0, 0, 0, 0, 0); LenheartNewUI_CreateWindow(Rindro_Luke_NotiC, "卢克攻坚队伍消息分发", 0, 0, 0, 0, 0); if (FightSituationWindow_Object) FightSituationWindow_Object.TopDraw(obj); //绘制动画 DrawPlayAni(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_Luke_Obj"); function Lenheart_Rindro_Luke_New(obj) { local RootTab = getroottable(); if (!RootTab.rawin("RinDro_Luke_Obj")) { RootTab.rawset("RinDro_Luke_Obj", RinDro_Luke()); } else { RootTab["RinDro_Luke_Obj"].Proc(obj); } } if (getroottable().rawin("LenheartTopFuncTab")) { getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Luke_NewFunc", Lenheart_Rindro_Luke_New); } else { local T = {}; T.rawset("Lenheart_Rindro_Luke_NewFunc", Lenheart_Rindro_Luke_New); getroottable().rawset("LenheartTopFuncTab", T); }