111
This commit is contained in:
624
Plugins/Roters/Roters.nut
Normal file
624
Plugins/Roters/Roters.nut
Normal file
@@ -0,0 +1,624 @@
|
||||
/*
|
||||
文件名: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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user