434 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			434 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名: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); | ||
|  | } |