624 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			624 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:Roters.nut | ||
|  | 路径:Plugins/Roters/Roters.nut | ||
|  | 创建日期:2022-11-02	12:27 | ||
|  | 文件用途:罗特斯世界BOSS | ||
|  | */ | ||
|  | RotersControl <- null | ||
|  | RotersRankControl <- null | ||
|  | RotersDgnIndex <- 18081 | ||
|  | RotersMapIndex <- 48502 | ||
|  | RotersMonIndex <- 8865646 | ||
|  | SpiritBarrierNum <- 9 | ||
|  | SpiritBarrierHit_MaxNum <- 100 | ||
|  | SpiritBarrierHit_Damage <- 0.01 | ||
|  | class RotersHudButton extends BasicsDrawTool { | ||
|  |     obj = null; | ||
|  |     buttonName = null; | ||
|  |     x = null; | ||
|  |     y = null; | ||
|  |     yoffset = 0; | ||
|  |     BaseAnifile = null; | ||
|  |     width = null; | ||
|  |     length = null; | ||
|  | 
 | ||
|  |     constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength) { | ||
|  |         obj = gObj; | ||
|  |         buttonName = gButtonName; | ||
|  |         x = gX; | ||
|  |         y = gY; | ||
|  |         BaseAnifile = gAnifile; | ||
|  |         width = gWidth; | ||
|  |         length = gLength; | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawButton() { | ||
|  |         if (isDown() && yoffset == 0) { | ||
|  |             yoffset = 1; | ||
|  |             y++; | ||
|  |         } | ||
|  | 
 | ||
|  |         T_DrawStayAni(obj, BaseAnifile, x, y, 0, buttonName); | ||
|  |         if (isInRect()) { | ||
|  |             T_DrawStayAni(obj, BaseAnifile, x, y, 1, buttonName); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function isInRect() { | ||
|  |         local mouseX = IMouse.GetXPos(); | ||
|  |         local mouseY = IMouse.GetYPos(); | ||
|  |         if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length)) | ||
|  |             return true; | ||
|  |         return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     function isDown() { | ||
|  |         if (isInRect() && IMouse.IsLBDown()) { | ||
|  |             obj.getVar(buttonName).setBool(0, true); | ||
|  |             return true; | ||
|  |         } | ||
|  |         return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     function isActive() { | ||
|  |         if (isInRect() && IMouse.IsLBUp() && obj.getVar(buttonName).getBool(0)) { | ||
|  |             obj.getVar(buttonName).setBool(0, false); | ||
|  |             yoffset = 0; | ||
|  |             return true; | ||
|  |         } | ||
|  |         return false; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | class Roters_Control extends BasicsDrawTool { | ||
|  |     //类状态 | ||
|  |     STATE = 0; | ||
|  | 
 | ||
|  |     Monster_obj = null; | ||
|  |     Time_obj = null; | ||
|  |     ID_Object = null; //怪物的ID | ||
|  |     GR_Object = null; //怪物组 | ||
|  |     AP_Chr = null; //人物的AP | ||
|  | 
 | ||
|  |     Boss_StaticHp = null; | ||
|  |     Boss_LastHp = 1.0; | ||
|  |     Boss_RealHp = null; | ||
|  |     EndBoss_HP = null; | ||
|  | 
 | ||
|  |     SpiritBarrier = SpiritBarrierNum; | ||
|  |     Hit_Num = 0; | ||
|  |     Hit_MaxNum = SpiritBarrierHit_MaxNum; | ||
|  |     Rem_Time = null; | ||
|  | 
 | ||
|  |     BossHpMainAni = null; | ||
|  |     BossHpAni = null; | ||
|  |     BossHpRdcT_obj = null; | ||
|  |     BossHpEffT_obj = null; | ||
|  | 
 | ||
|  |     BackTown = null; | ||
|  |     GoTownTime = null; | ||
|  | 
 | ||
|  |     //构造函数 | ||
|  |     constructor() { | ||
|  |         //构造时间容器 | ||
|  |         Time_obj = TimeSTL("RotersDgn", 160000); | ||
|  |     } | ||
|  | 
 | ||
|  |     function exit() { | ||
|  |         STATE = -1; | ||
|  |         Time_obj.Reset(); | ||
|  |         Time_obj.Delete(); | ||
|  |     } | ||
|  | 
 | ||
|  |     function GetWorldIndex() { | ||
|  |         local stage = sq_GetGlobaludpModuleStage(); | ||
|  |         local MapIndex = sq_GetMapIndex(stage); | ||
|  |         return MapIndex; | ||
|  |     } | ||
|  |     //初始化Boss基础代码 | ||
|  |     function InitBossStatic(obj) { | ||
|  |         //类状态为0时 | ||
|  |         if (STATE == 0) { | ||
|  |             //还没有给怪物附加AP时 | ||
|  |             if (ID_Object == null) { | ||
|  |                 local objectManager = obj.getObjectManager(); | ||
|  |                 if (!objectManager) return; | ||
|  |                 local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); | ||
|  |                 for (local i = 0; i < CollisionObjectNumber; ++i) { | ||
|  |                     local Monobject = objectManager.getCollisionObject(i); | ||
|  |                     local MonIndex = Monobject.getCollisionObjectIndex(); | ||
|  |                     //罗特斯 附加以后类状态写入1 | ||
|  |                     if (MonIndex == RotersMonIndex) { | ||
|  |                         Monobject.setObjectHeight(6666); | ||
|  |                         sq_ChangeDrawLayer(Monobject, ENUM_DRAWLAYER_BOTTOM); | ||
|  |                         //Ap_Object = CNSquirrelAppendage.sq_AppendAppendage(Monobject, obj, -1, false, "appendage/roters/ap_roters.nut", true); | ||
|  |                         ID_Object = sq_GetUniqueId(Monobject); | ||
|  |                         GR_Object = sq_GetGroup(Monobject); | ||
|  |                         Time_obj.Start(); | ||
|  |                         STATE = 1; | ||
|  |                     } | ||
|  |                     //门 | ||
|  |                     if (MonIndex == 5718) { | ||
|  |                         sq_ChangeDrawLayer(Monobject, 7); | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     //初始化人物基础代码 | ||
|  |     function InitChrStatic(obj) { | ||
|  |         //如果类状态为1时 | ||
|  |         if (STATE == 1) { | ||
|  |             //如果人物AP不存在时 | ||
|  |             if (AP_Chr == null) { | ||
|  |                 //附加人物AP 并将类状态写入2 | ||
|  |                 AP_Chr = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/roters/ap_chr.nut", true); | ||
|  |                 STATE = 2; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     //罗特斯Ap proc 执行代码 | ||
|  |     function proc_Roters_M(obj) { | ||
|  |         if (!ID_Object || !GR_Object) return; | ||
|  |         local sourceObj = sq_GetObject(obj, GR_Object, ID_Object); //得到源对象	--	施加AP的人 | ||
|  |         sourceObj = sq_GetCNRDObjectToActiveObject(sourceObj); | ||
|  |         //如果附加Ap的人不存在了直接返回城镇 | ||
|  |         if (sourceObj.isDead()) { | ||
|  |             L_sq_GoTown(); | ||
|  |             return; | ||
|  |         } | ||
|  |         //如果Ap源对象不是我 则直接返回  只需要一个人来操作机制 | ||
|  |         if (!sourceObj.isMyControlObject()) return; | ||
|  | 
 | ||
|  |         //如果Boss的基准生命值为空时 赋值给Boss最大生命值 | ||
|  |         if (Boss_StaticHp == null) Boss_StaticHp = sourceObj.getHpMax(); | ||
|  |         //如果Boss对象为空时 赋值给对象 | ||
|  |         //if (Monster_obj == null) Monster_obj = sourceObj; | ||
|  |         //Boss当前真实生命值赋值 | ||
|  |         Boss_RealHp = sourceObj.getHp(); | ||
|  |         //判断时间写入Boss蓝耗机制 | ||
|  |         if (Rem_Time > 12000 && Rem_Time < 15000) { | ||
|  |             sourceObj.sendSetMpPacket(((sourceObj.getMpMax() * 0.9) - 15.0).tointeger()); | ||
|  |             if (STATE == 2) STATE = 3; | ||
|  |         } | ||
|  |         if (Rem_Time > 8000 && Rem_Time < 12000) { | ||
|  |             sourceObj.sendSetMpPacket(((sourceObj.getMpMax() * 0.7) - 15.0).tointeger()); | ||
|  |             if (STATE == 3) STATE = 4; | ||
|  |         } | ||
|  |         if (Rem_Time > 0 && Rem_Time < 8000) { | ||
|  |             sourceObj.sendSetMpPacket(((sourceObj.getMpMax() * 0.5) - 15.0).tointeger()); | ||
|  |             if (STATE == 4) STATE = 5; | ||
|  |         } | ||
|  |     } | ||
|  |     //人物AP执行代码 | ||
|  |     function onAttack_chr_M(appendage, realAttacker, damager, boundingBox, isStuck) { | ||
|  |         local ParentObj = appendage.getParent(); //得到源对象	--	施加AP的人 | ||
|  |         if (!ID_Object || !GR_Object) return; | ||
|  |         local sourceObj = sq_GetObject(ParentObj, GR_Object, ID_Object); //得到源对象	--	施加AP的人 | ||
|  |         sourceObj = sq_GetCNRDObjectToActiveObject(sourceObj); | ||
|  | 
 | ||
|  |         //如果Ap父对象不是我 则直接返回  不增加其他人的连击数 | ||
|  |         if (!ParentObj.isMyControlObject()) return; | ||
|  |         //如果攻击到的是罗特斯本体不增加连击数 | ||
|  |         if (damager.getCollisionObjectIndex() == RotersMonIndex) return; | ||
|  |         //如果连击数小于100 每次攻击+1 | ||
|  |         if (Hit_Num < 100) ++Hit_Num; | ||
|  |         //如果连击数大于等于100 并且壁障数大于0 | ||
|  |         if (Hit_Num >= 100 && SpiritBarrier > 0) { | ||
|  |             //清空连击数 壁障数设置-1 | ||
|  |             Hit_Num = 0; | ||
|  |             --SpiritBarrier; | ||
|  |             sourceObj.setHp(sourceObj.getHp() - (sourceObj.getHpMax().tofloat() * SpiritBarrierHit_Damage).tointeger(), null, true); | ||
|  |             CallBossHp(1); | ||
|  |         } | ||
|  | 
 | ||
|  |     } | ||
|  |     //绘制精神屏障主界面 | ||
|  |     function drawSpiritBarrier(obj) { | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/bz/main.ani", 650, 25, 0, "精神屏障主界面"); | ||
|  |         setClip(659, 50, 659 + (97 * (Hit_Num.tofloat() / Hit_MaxNum.tofloat())).tointeger(), 54); | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/bz/main.ani", 659, 50, 1, "精神屏障进度条"); | ||
|  |         releaseClip(); | ||
|  |         T_DrawCustomNum(obj, 736, 26, SpiritBarrier, "common/dungeon/roters/bz/", 0); | ||
|  |     } | ||
|  |     //绘制时间 | ||
|  |     function drawTime(obj) { | ||
|  |         if (!Time_obj.Get()) return; | ||
|  |         Rem_Time = (160000 - Time_obj.Get()) / 10; | ||
|  |         local Offset_Xpos = 0; | ||
|  |         if (Rem_Time < 10000) Offset_Xpos = -9; | ||
|  |         if (Rem_Time < 1000) Offset_Xpos = -18; | ||
|  |         if (IMouse.GetXPos() < 205 && IMouse.GetYPos() < 49 && IMouse.GetXPos() >= 0 && IMouse.GetYPos() >= 0) T_DrawStayAni(obj, "common/dungeon/roters/time/main.ani", 0, 2, 1, "倒计时主界面背景"); | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/time/main.ani", 0, 2, 0, "倒计时主界面"); | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/time/d.ani", 101 + Offset_Xpos, 9, 0, "时间点"); | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/time/d.ani", 101 + Offset_Xpos, 18, 0, "时间点2"); | ||
|  |         T_DrawCustomTimeNum(obj, 132 + Offset_Xpos, 23, Rem_Time, "common/dungeon/roters/time/", 18, 0); | ||
|  |     } | ||
|  |     //绘制Boss血条动画 | ||
|  |     function drawBossHp(obj) { | ||
|  |         if (BossHpRdcT_obj) { | ||
|  |             local nowhun = Boss_RealHp.tofloat() / Boss_StaticHp.tofloat(); | ||
|  |             BossHpMainAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 106, 67, 0, "Boss血条主界面"); | ||
|  |             local v = sq_GetUniformVelocity((Boss_LastHp * 493.0).tointeger(), (nowhun * 493.0).tointeger(), BossHpRdcT_obj.Get(), 1000); | ||
|  |             setClip(154, 88, 154 + v, 109); | ||
|  |             BossHpAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 154, 88, 1, "Boss血条"); | ||
|  |             releaseClip(); | ||
|  |             BossHpMainAni.setRGBA(255, 255, 255, 250); | ||
|  |             BossHpAni.setRGBA(255, 255, 255, 250); | ||
|  |             if (BossHpRdcT_obj.Get() >= 2000) { | ||
|  |                 BossHpRdcT_obj.Delete(); | ||
|  |                 BossHpRdcT_obj = null; | ||
|  |                 CallBossHp(2); | ||
|  |             } | ||
|  |         } else if (BossHpEffT_obj) { | ||
|  |             local nowhun = Boss_RealHp.tofloat() / Boss_StaticHp.tofloat(); | ||
|  |             BossHpMainAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 106, 67, 0, "Boss血条主界面"); | ||
|  |             setClip(154, 88, 154 + (nowhun * 493.0).tointeger(), 109); | ||
|  |             BossHpAni = T_DrawStayAni(obj, "common/dungeon/roters/hp/main.ani", 154, 88, 1, "Boss血条"); | ||
|  |             releaseClip(); | ||
|  |             local v = sq_GetUniformVelocity(250, 0, BossHpEffT_obj.Get(), 1000); | ||
|  |             BossHpMainAni.setRGBA(255, 255, 255, v); | ||
|  |             BossHpAni.setRGBA(255, 255, 255, v); | ||
|  |             if (BossHpEffT_obj.Get() >= 1000) { | ||
|  |                 BossHpEffT_obj.Delete(); | ||
|  |                 BossHpEffT_obj = null; | ||
|  |                 Boss_LastHp = nowhun; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     //绘制Boss血条动画 | ||
|  |     function CallBossHp(Type) { | ||
|  |         switch (Type) { | ||
|  |             case 1: | ||
|  |                 if (BossHpRdcT_obj == null) BossHpRdcT_obj = TimeSTL("RotersBossHpRdc", 2000); | ||
|  |                 BossHpRdcT_obj.Reset(); | ||
|  |                 BossHpRdcT_obj.Start(); | ||
|  |                 break; | ||
|  |             case 2: | ||
|  |                 if (BossHpEffT_obj == null) BossHpEffT_obj = TimeSTL("RotersBossHpEff", 1000); | ||
|  |                 BossHpEffT_obj.Reset(); | ||
|  |                 BossHpEffT_obj.Start(); | ||
|  |                 break; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function DrawMain(obj) { | ||
|  |         if (STATE >= 6) return; | ||
|  |         //绘制精神屏障主界面 | ||
|  |         drawSpiritBarrier(obj); | ||
|  |         //绘制时间 | ||
|  |         drawTime(obj); | ||
|  |         drawBossHp(obj); | ||
|  |     } | ||
|  | 
 | ||
|  |     function ProcDgn(obj) { | ||
|  |         //初始化BOSS基础代码 | ||
|  |         InitBossStatic(obj); | ||
|  |         //初始化角色基础代码 | ||
|  |         InitChrStatic(obj); | ||
|  | 
 | ||
|  |         //罗特斯循环函数 | ||
|  |         proc_Roters_M(obj); | ||
|  | 
 | ||
|  | 
 | ||
|  |         //如果时间结束 | ||
|  |         if (Rem_Time == 0 && STATE >= 3) { | ||
|  |             if (EndBoss_HP == null) EndBoss_HP = Boss_StaticHp - Boss_RealHp; | ||
|  |             if (BackTown == null) BackTown = RotersHudButton(obj, "rotersbacktown", 371, 245, "common/dungeon/roters/damage/back.ani", 66, 19); | ||
|  |             local Offset_Xpos = ((EndBoss_HP.tostring().len() - 1) * -5); | ||
|  |             T_DrawStayAni(obj, "common/dungeon/roters/damage/main.ani", 249, 115, 0, "结算主界面"); | ||
|  |             T_DrawCustomNum(obj, 395 + Offset_Xpos, 171, EndBoss_HP, "common/dungeon/roters/damage/num/", 10); | ||
|  | 
 | ||
|  |             if (STATE == 5) { | ||
|  |                 local WorldBossUpdateDamage = Json_STL("WorldBossUpdateDamage"); | ||
|  |                 WorldBossUpdateDamage.Put("op", 13); | ||
|  |                 WorldBossUpdateDamage.Put("hurt", EndBoss_HP); | ||
|  |                 local str = WorldBossUpdateDamage.GetString(); | ||
|  |                 L_sq_SendPackType(130); | ||
|  |                 L_sq_SendPackWChar(str); | ||
|  |                 L_sq_SendPack(); | ||
|  |                 WorldBossUpdateDamage.Delete(); | ||
|  | 
 | ||
|  |                 STATE = 6; | ||
|  |             } | ||
|  | 
 | ||
|  | 
 | ||
|  |             BackTown.DrawButton(); | ||
|  |             if (BackTown.isActive()) { | ||
|  |                 L_sq_GoTown(); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | function Roters(obj) { | ||
|  |     //如果在副本中 | ||
|  |     if (sq_GetCurrentModuleType() == 3) { | ||
|  |         //如果获取当前地图ID 等于 罗特斯地图ID | ||
|  |         if (Roters_Control.GetWorldIndex() == RotersMapIndex) { | ||
|  |             //如果罗特斯对象为空 则实例化 | ||
|  |             if (RotersControl == null) { | ||
|  |                 RotersControl = Roters_Control(); | ||
|  |             } | ||
|  |             //执行逻辑主函数 | ||
|  |             RotersControl.ProcDgn(obj); | ||
|  |             //执行绘制主函数 | ||
|  |             RotersControl.DrawMain(obj); | ||
|  |         } else { | ||
|  |             //如果罗特斯对象不为空 则销毁他 | ||
|  |             if (RotersControl != null) { | ||
|  |                 RotersControl.exit(); | ||
|  |                 RotersControl = null; | ||
|  |             } | ||
|  |         } | ||
|  |     } else { | ||
|  |         //如果罗特斯对象不为空 则销毁他 | ||
|  |         if (RotersControl != null) { | ||
|  |             RotersControl.exit(); | ||
|  |             RotersControl = null; | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | //罗特斯排行榜界面类 | ||
|  | class Roters_RankControl extends BasicsDrawTool { | ||
|  |     State = -2; //世界BOSS当前状态 | ||
|  |     End = 0; | ||
|  |     Windows_Object = null; | ||
|  |     AnimotionState = 0; | ||
|  |     BufferTimeSTL = null; | ||
|  |     Page = 0; | ||
|  | 
 | ||
|  |     MainSwitchButton = null; | ||
|  | 
 | ||
|  |     //OP模式 | ||
|  |     ThisOp = null; | ||
|  |     //类JsonBuffer | ||
|  |     ThisJsonBuffer = null; | ||
|  | 
 | ||
|  |     function RotersRankCallBack(chunk) { | ||
|  |         local RootTab = getroottable(); | ||
|  |         if (RootTab.rawin("ROTERSRANKCONTROL") == false) return; | ||
|  | 
 | ||
|  |         local RotersRankPack = Json_STL("RotersRankPack"); | ||
|  |         RotersRankPack.Parse(chunk, 0, false); | ||
|  |         local op = RotersRankPack.Get("op"); | ||
|  |         switch (op) { | ||
|  |             //开界面 | ||
|  |             case 12: { | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisOp = 12; | ||
|  |                 if (RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer) RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer.Delete(); | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer = Json_STL("ThisJsonBuffer"); | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisJsonBuffer.Parse(chunk, 0, false); | ||
|  |             } | ||
|  |             break; | ||
|  |             //开启世界BOSS | ||
|  |             case 14: | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisOp = 14; | ||
|  |                 break; | ||
|  |                 //打赢了 | ||
|  |             case 16: | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisOp = 16; | ||
|  |                 break; | ||
|  |                 //没打赢 | ||
|  |             case 18: | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisOp = 18; | ||
|  |                 break; | ||
|  |                 //彻底结束 | ||
|  |             case 20: | ||
|  |                 RootTab["ROTERSRANKCONTROL"].ThisOp = 20; | ||
|  |                 break; | ||
|  |             default: | ||
|  |                 break; | ||
|  |         } | ||
|  |         RotersRankPack.Delete(); | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor() { | ||
|  |         Pack_Control.rawset(12, RotersRankCallBack); | ||
|  |         Pack_Control.rawset(14, RotersRankCallBack); | ||
|  |         Pack_Control.rawset(16, RotersRankCallBack); | ||
|  |         Pack_Control.rawset(18, RotersRankCallBack); | ||
|  |         Pack_Control.rawset(20, RotersRankCallBack); | ||
|  |         BufferTimeSTL = TimeSTL("RotersBufferTimeSTL", 3000); | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //绘制排名信息 | ||
|  |     function DrawRankInfo(obj) { | ||
|  |         //如果信息表不存在 或数据不正确 则返回 | ||
|  |         if (!ThisJsonBuffer || ThisJsonBuffer.tostring().len() < 1) return; | ||
|  |         local Y_Pos_Offset = 0; | ||
|  |         for (local i = 0; i < 11; i++) { | ||
|  |             if (i == 10) Y_Pos_Offset = 3; | ||
|  |             L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->rank"), 163, 325 + (i * 16) + Y_Pos_Offset, 0xFF99D7FF, 1); | ||
|  |             L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->cName"), 257, 325 + (i * 16) + Y_Pos_Offset, 0xFF00D7FF, 1); | ||
|  |             L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->job"), 409, 325 + (i * 16) + Y_Pos_Offset, 0xB79260FF, 1); | ||
|  |             L_Code_STL(ThisJsonBuffer.Get("result->" + i + "->hurt"), 535, 325 + (i * 16) + Y_Pos_Offset, 0xFFFF00FF, 1); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制主界面框 | ||
|  |     function DrawRankMain(obj) { | ||
|  |         //如果信息表不存在 或数据不正确 则返回 | ||
|  |         if (!ThisJsonBuffer || ThisJsonBuffer.tostring().len() < 1) return; | ||
|  | 
 | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/main/main.ani", 129, 8, 0, "罗特斯Rank主界面"); | ||
|  |         //T_DrawDynamicAni(obj, "common/dungeon/roters/main/maineff.ani", 133, 52, "罗特斯Rankeff主界面"); | ||
|  | 
 | ||
|  |         local HpPoi = ThisJsonBuffer.Get("hppercentage").tofloat() / 100.0; | ||
|  |         setClip(130, 28, 130 + (542.0 * HpPoi).tointeger(), 68); | ||
|  |         T_DrawStayAni(obj, "common/dungeon/roters/main/mainhp.ani", 130, 28, 0, "罗特斯Rank生命值"); | ||
|  |         releaseClip(); | ||
|  | 
 | ||
|  |         local AttackButton = ButtonPro(obj, "AttackButton", 542, 270, "common/dungeon/roters/main/attackbutton.ani", 120, 20); | ||
|  |         AttackButton.SetRectEnble(true, "AttackButton", 542, 270, "common/dungeon/roters/main/attackbutton.ani", 1); | ||
|  |         AttackButton.SetCustomClickEnble(true, "AttackButton", 542, 270 + 1, "common/dungeon/roters/main/attackbutton.ani", 1); | ||
|  |         if (End != 1) AttackButton.Show(); | ||
|  |         if (AttackButton.isLBActive()) { | ||
|  |             L_sq_GoDungeon(RotersDgnIndex); | ||
|  |         } | ||
|  | 
 | ||
|  |         local RightSwitchButton = ButtonPro(obj, "RightSwitchButton", 460, 504, "common/dungeon/roters/main/rightbutton.ani", 11, 13); | ||
|  |         RightSwitchButton.SetRectEnble(true, "RightSwitchButton", 460, 504, "common/dungeon/roters/main/rightbutton.ani", 1); | ||
|  |         RightSwitchButton.SetCustomClickEnble(true, "RightSwitchButton", 460, 504 + 1, "common/dungeon/roters/main/rightbutton.ani", 1); | ||
|  |         RightSwitchButton.Show(); | ||
|  |         if (RightSwitchButton.isLBActive()) { | ||
|  |             if (Page < 4) ++Page; | ||
|  |             local Test = Json_STL("WorldBossBuffer"); | ||
|  |             Test.Put("op", 11); | ||
|  |             Test.Put("page", Page); | ||
|  |             local str = Test.GetString(); | ||
|  |             L_sq_SendPackType(130); | ||
|  |             L_sq_SendPackWChar(str); | ||
|  |             L_sq_SendPack(); | ||
|  |             Test.Delete(); | ||
|  |         } | ||
|  | 
 | ||
|  |         local LeftSwitchButton = ButtonPro(obj, "LeftSwitchButton", 336, 504, "common/dungeon/roters/main/leftbutton.ani", 11, 13); | ||
|  |         LeftSwitchButton.SetRectEnble(true, "LeftSwitchButton", 336, 504, "common/dungeon/roters/main/leftbutton.ani", 1); | ||
|  |         LeftSwitchButton.SetCustomClickEnble(true, "LeftSwitchButton", 336, 504 + 1, "common/dungeon/roters/main/leftbutton.ani", 1); | ||
|  |         LeftSwitchButton.Show(); | ||
|  |         if (LeftSwitchButton.isLBActive()) { | ||
|  |             if (Page > 0) --Page; | ||
|  |             local Test = Json_STL("WorldBossBuffer"); | ||
|  |             Test.Put("op", 11); | ||
|  |             Test.Put("page", Page); | ||
|  |             local str = Test.GetString(); | ||
|  |             L_sq_SendPackType(130); | ||
|  |             L_sq_SendPackWChar(str); | ||
|  |             L_sq_SendPack(); | ||
|  |             Test.Delete(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制主界面开启按钮 | ||
|  |     function DrawMainButton(obj) { | ||
|  |         T_DrawDynamicAni(obj, "common/dungeon/roters/main/mainbuttoneff.ani", -30, 35, "罗特斯Rank按钮特效"); | ||
|  | 
 | ||
|  |         if (MainSwitchButton == null) { | ||
|  |             MainSwitchButton = ButtonPro(obj, "MainSwitchButton", 15, 70, "common/dungeon/roters/main/mainbutton.ani", 65, 65); | ||
|  |         } | ||
|  |         MainSwitchButton.SetRectEnble(true, "MainSwitchButtonr", 15, 70, "common/dungeon/roters/main/mainbutton.ani", 1); | ||
|  |         MainSwitchButton.SetCustomClickEnble(true, "MainSwitchButtonc", 15, 70, "common/dungeon/roters/main/mainbutton.ani", 2); | ||
|  |         MainSwitchButton.Show(); | ||
|  | 
 | ||
|  |         if (MainSwitchButton.isLBActive()) { | ||
|  |             if (!sq_GetPopupWindowMainCotrol(267)) L_NewWindows("Lenheart", 267, 0x65535); | ||
|  |             local Test = Json_STL("WorldBossBuffer"); | ||
|  |             Test.Put("op", 11); | ||
|  |             Test.Put("page", Page); | ||
|  |             local str = Test.GetString(); | ||
|  |             L_sq_SendPackType(130); | ||
|  |             L_sq_SendPackWChar(str); | ||
|  |             L_sq_SendPack(); | ||
|  |             Test.Delete(); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     //Run主执行函数 | ||
|  |     function Run(obj) { | ||
|  |         //初始状态 | ||
|  |         if (State == -2) { | ||
|  |             //构造 嗅探包 请求世界Boss是否开启 | ||
|  |             local WordBossSwitchReqPack = Json_STL("WordBossSwitchReqPack"); | ||
|  |             WordBossSwitchReqPack.Put("op", 15); | ||
|  |             local StrBuffer = WordBossSwitchReqPack.GetString(); | ||
|  |             L_sq_SendPackType(130); | ||
|  |             L_sq_SendPackWChar(StrBuffer); | ||
|  |             L_sq_SendPack(); | ||
|  |             WordBossSwitchReqPack.Delete(); | ||
|  |             State = -1; | ||
|  |         } | ||
|  |         //等待开启信号状态 | ||
|  |         if (State == -1) { | ||
|  |             //如果OP状态等于14 | ||
|  |             if (ThisOp == 14) { | ||
|  |                 if (AnimotionState == 0) { | ||
|  |                     BufferTimeSTL.Reset(); | ||
|  |                     BufferTimeSTL.Start(); | ||
|  |                     AnimotionState = 1; | ||
|  |                 } | ||
|  |                 if (AnimotionState == 1) { | ||
|  |                     local MainStartAni = T_DrawStayAni(obj, "common/dungeon/roters/main/mainstart.ani", 80, 50, 0, "RotersMainStartAni"); | ||
|  |                     local v = sq_GetUniformVelocity(0, 250, BufferTimeSTL.Get(), 3000); | ||
|  |                     MainStartAni.setRGBA(255, 255, 255, v); | ||
|  |                     if (BufferTimeSTL.Get() >= 2900) { | ||
|  |                         BufferTimeSTL.Reset(); | ||
|  |                         BufferTimeSTL.Start(); | ||
|  |                         AnimotionState = 2; | ||
|  |                     } | ||
|  |                 } | ||
|  |                 if (AnimotionState == 2) { | ||
|  |                     local MainStartAni = T_DrawStayAni(obj, "common/dungeon/roters/main/mainstart.ani", 80, 50, 0, "RotersMainStartAni"); | ||
|  |                     local v = sq_GetUniformVelocity(250, 0, BufferTimeSTL.Get(), 3000); | ||
|  |                     MainStartAni.setRGBA(255, 255, 255, v); | ||
|  |                     if (BufferTimeSTL.Get() >= 2900) { | ||
|  |                         BufferTimeSTL.Reset(); | ||
|  |                         BufferTimeSTL.Delete(); | ||
|  |                         BufferTimeSTL = null; | ||
|  |                         AnimotionState = 3; | ||
|  |                     } | ||
|  |                 } | ||
|  |                 if (AnimotionState == 3) { | ||
|  |                     End = 0; //是否结束写入0 | ||
|  |                     State = 0; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         //绘制世界BOSS面板按钮 | ||
|  |         if (State == 0) { | ||
|  |             DrawMainButton(obj); | ||
|  |             //如果收到 op 12号包 打开了面板 state写入1 | ||
|  |             if (ThisOp == 12) { | ||
|  |                 State = 1; | ||
|  |                 ThisOp = 0; | ||
|  |             } | ||
|  |         } | ||
|  |         //绘制面板 | ||
|  |         if (State == 1) { | ||
|  |             //如果窗口开启绘制面板  绘制排名 | ||
|  |             if (sq_GetPopupWindowMainCotrol(267)) { | ||
|  |                 Windows_Object = sq_GetPopupWindowMainCotrol(267); | ||
|  |                 DrawRankMain(obj); | ||
|  |                 DrawRankInfo(obj); | ||
|  |             } | ||
|  |             //窗口关闭状态写回0 | ||
|  |             else { | ||
|  |                 State = 0; | ||
|  |             } | ||
|  |         } | ||
|  |         //检测到 打赢或者打输了的 包 是否结束写入1 | ||
|  |         if (ThisOp == 16 || ThisOp == 18) { | ||
|  |             State = 0; | ||
|  |             End = 1; | ||
|  |         } | ||
|  |         //世界BOSS彻底结束 状态回归-2 | ||
|  |         if (ThisOp == 20) { | ||
|  |             State = -2; | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | function RotersRank(obj) { | ||
|  |     //只在城镇中执行 | ||
|  |     if (sq_GetCurrentModuleType() != 1) return; | ||
|  | 
 | ||
|  |     local RootTab = getroottable(); | ||
|  |      | ||
|  |     //如果不在西海岸主干道不执行 | ||
|  |     if (L_sq_GetTownIndex() != 3 || L_sq_GetRegionIndex() != 0) { | ||
|  |         if (RootTab.rawin("ROTERSRANKCONTROL"))RootTab.rawdelete("ROTERSRANKCONTROL"); | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     //如果对象不存在 实例化对象 | ||
|  |     if (RootTab.rawin("ROTERSRANKCONTROL") == false) { | ||
|  |         local ROTERSRANKCONTROLOBJ = Roters_RankControl(); | ||
|  |         RootTab.rawset("ROTERSRANKCONTROL", ROTERSRANKCONTROLOBJ); | ||
|  |     } else { | ||
|  |         RootTab["ROTERSRANKCONTROL"].Run(obj); | ||
|  |     } | ||
|  | 
 | ||
|  | } |