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