413 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			413 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:Rindro_Anton.nut
 | |
| 路径:Project/Anton/Rindro_Anton.nut
 | |
| 创建日期:2024-08-13	09:30
 | |
| 文件用途:安图恩
 | |
| */
 | |
| 
 | |
| 
 | |
| //安图恩核心数据类
 | |
| class RinDro_Anton 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 = 20064501,
 | |
|         }
 | |
|         SendPackEx(T);
 | |
|     }
 | |
|     //请求掉线配置信息
 | |
|     function GetFiendwarDown() {
 | |
|         local T = {
 | |
|             op = 20064063,
 | |
|         }
 | |
|         SendPackEx(T);
 | |
|     }
 | |
| 
 | |
|     //基础信息配置
 | |
|     function FiendwarBase(Chunk) {
 | |
|         BaseConfig = Json.Decode(Chunk);
 | |
|         FiendwarChannelTownLogicCallBack();
 | |
|     }
 | |
| 
 | |
|     //基础攻坚信息配置
 | |
|     function AntonFightBase(Chunk) {
 | |
|         FightConfig = Json.Decode(Chunk);
 | |
|     }
 | |
| 
 | |
|     //团本专属频道上线城镇移动包
 | |
|     function FiendwarChannelTownLogicCallBack() {
 | |
|         if (BaseConfig.channel_index.find("18")) {
 | |
|             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_AntonPartyInfoMemberC) {
 | |
|                 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) {
 | |
|             // 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 = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null),
 | |
|                 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 = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备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_AntonPartyInfoMemberC(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 = 20064011
 | |
|         }
 | |
|         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(20064028, RaidStartFightCallBack.bindenv(this));
 | |
|         Pack_Control.rawset(20064016, RaidFightInfoCallBack.bindenv(this));
 | |
|         Pack_Control.rawset(20064004, GetTeamInfoCallBack.bindenv(this));
 | |
|         Pack_Control.rawset(20064036, AntonFightBase.bindenv(this));
 | |
|         //攻坚奖励包
 | |
|         Pack_Control.rawset(20064026, RaidRewardInfoCallBack.bindenv(this));
 | |
|         //初始化包  退出队伍 或者 被 请出队伍
 | |
|         Pack_Control.rawset(20064008, RaidInitCallBack.bindenv(this));
 | |
|         //火山怪物投放
 | |
|         Pack_Control.rawset(20064050, MonsterSendCallBack.bindenv(this));
 | |
|         //绘制动画包
 | |
|         Pack_Control.rawset(20064038, RaidPlayAniCallBack.bindenv(this));
 | |
| 
 | |
| 
 | |
|         //获取基础配置回调包
 | |
|         Pack_Control.rawset(20064502, FiendwarBase.bindenv(this));
 | |
|         //第一次上线要重新请求一下位置信息
 | |
|         GetFiendwarBase();
 | |
|         //看看是否有断线重连
 | |
|         GetFiendwarDown();
 | |
|     }
 | |
| 
 | |
| 
 | |
|     function Proc(obj) {
 | |
|         PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Anton_PartyHallC, "新安图恩攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18);
 | |
|         PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_AntonPartyFormation, "安图恩我的队伍编队窗口", 375, 190, 294, 192, 18);
 | |
|         FightSituationWindow_Object = LenheartNewUI_CreateWindow(Rindro_AntonFightSituationC, "安图恩攻坚战况表", ((getroottable().Rindro_Scr_Width - 800) / 2).tointeger(), 8, 800, 600, 0);
 | |
|         PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_AntonPartyInfoC, "安图恩我的队伍窗口", 6, 15, 354, 566, 18);
 | |
|         RewardWindow_Object = LenheartNewUI_CreateWindow(Rindro_Anton_RewardC, "安图恩翻牌奖励窗口", 0, 0, 0, 0, 0);
 | |
|         LenheartNewUI_CreateWindow(Rindro_Anton_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/anton/title/00_start_back.ani", 430 + Offset, 210 + 26, "安图恩阻截开始" + DrawPlayAniT);
 | |
|                 break;
 | |
|             case 6:
 | |
|                 T_DrawDynamicAni(obj, "common/anton/title/02_success_back.ani", 430 + Offset, 210 + 26, "安图恩阻截成功" + DrawPlayAniT);
 | |
|                 break;
 | |
|             case 7:
 | |
|                 T_DrawDynamicAni(obj, "common/anton/title/01_fail_back.ani", 430 + Offset, 210 + 26, "安图恩阻截失败" + DrawPlayAniT);
 | |
|                 break;
 | |
|             case 8:
 | |
|                 T_DrawDynamicAni(obj, "common/anton/title/00_start_back_1.ani", 430 + Offset, 210 + 26, "安图恩灭杀开始" + DrawPlayAniT);
 | |
|                 break;
 | |
|             case 9:
 | |
|                 T_DrawDynamicAni(obj, "common/anton/title/02_success_back_1.ani", 430 + Offset, 210 + 26, "安图恩灭杀成功" + DrawPlayAniT);
 | |
|                 break;
 | |
|             case 10:
 | |
|                 T_DrawDynamicAni(obj, "common/anton/title/01_fail_back_1.ani", 430 + 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_Anton_Obj");
 | |
| 
 | |
| function Lenheart_Rindro_Anton_New(obj) {
 | |
|     local RootTab = getroottable();
 | |
|     if (!RootTab.rawin("RinDro_Anton_Obj")) {
 | |
|         RootTab.rawset("RinDro_Anton_Obj", RinDro_Anton());
 | |
|     } else {
 | |
|         RootTab["RinDro_Anton_Obj"].Proc(obj);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (getroottable().rawin("LenheartTopFuncTab")) {
 | |
|     getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Anton_NewFunc", Lenheart_Rindro_Anton_New);
 | |
| } else {
 | |
|     local T = {};
 | |
|     T.rawset("Lenheart_Rindro_Anton_NewFunc", Lenheart_Rindro_Anton_New);
 | |
|     getroottable().rawset("LenheartTopFuncTab", T);
 | |
| } |