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);
 | |
|     }
 | |
| 
 | |
| } |