111
This commit is contained in:
328
Plugins/Roters/New_Roters.nut
Normal file
328
Plugins/Roters/New_Roters.nut
Normal file
@@ -0,0 +1,328 @@
|
||||
class New_RotersC extends BasicsDrawTool {
|
||||
//世界BOSS是否打开
|
||||
EventState = false;
|
||||
//活动开启的动画是否播放过
|
||||
EventAnimationPlayFlag = false;
|
||||
//活动开启动画Timer
|
||||
EventAnimationTimer = null;
|
||||
|
||||
|
||||
//基础奖励道具信息
|
||||
RewardInfo = null;
|
||||
ItemInfoObject = null;
|
||||
ItemInfoDrawS = null;
|
||||
//排名信息
|
||||
RankInfo = null;
|
||||
|
||||
//BOSS血量
|
||||
BOSS_HP_RATE = 1;
|
||||
|
||||
WindowObj = null; //窗口对象
|
||||
MainState = false; //主状态
|
||||
X = 124;
|
||||
Y = 16;
|
||||
|
||||
|
||||
//收包逻辑
|
||||
function GetWolrdBossEventStateCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
switch (Jso.State) {
|
||||
//未开启
|
||||
case 0: {
|
||||
|
||||
}
|
||||
break;
|
||||
//开启中
|
||||
case 1: {
|
||||
if (EventState == false) {
|
||||
EventState = true;
|
||||
EventAnimationPlayFlag = true;
|
||||
EventIcon("世界BOSS ", 232, 232, this);
|
||||
}
|
||||
}
|
||||
break;
|
||||
//结算中
|
||||
case 2: {
|
||||
if (EventState == false) {
|
||||
EventState = true;
|
||||
EventAnimationPlayFlag = true;
|
||||
EventIcon("世界BOSS ", 232, 232, this);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//获取排名信息
|
||||
function GetWorldBossEventRankInfoCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
RankInfo = Jso.RankInfo;
|
||||
BOSS_HP_RATE = Jso.BossHpRate;
|
||||
if (BOSS_HP_RATE == 0) BOSS_HP_RATE = 0.01;
|
||||
}
|
||||
|
||||
//获取基础信息包
|
||||
function GetWorldBossEventBaseInfoCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
RewardInfo = Jso.RewardInfo;
|
||||
local GetItemInfoArr = [];
|
||||
foreach(Value in RewardInfo) {
|
||||
if (!(ItemInfoObject.rawin(Value))) {
|
||||
GetItemInfoArr.append(Value);
|
||||
}
|
||||
}
|
||||
if (GetItemInfoArr.len() > 0) {
|
||||
local T = {
|
||||
op = 20231010,
|
||||
realop = 20060020,
|
||||
itemId = RewardInfo,
|
||||
Type = 2,
|
||||
}
|
||||
SendPack(T);
|
||||
}
|
||||
}
|
||||
|
||||
function GetWorldBossEventBaseItemInfoCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
foreach(Pos, Value in Jso.itemInfo) {
|
||||
if (Value.Name2.len() == 0)
|
||||
Value.Name2 = "Yosin-Team";
|
||||
ItemInfoObject.rawset(Jso.itemId[Pos], Value);
|
||||
}
|
||||
}
|
||||
//收包逻辑
|
||||
|
||||
|
||||
|
||||
|
||||
//发包逻辑
|
||||
function GetWolrdBossEventState() {
|
||||
local T = {
|
||||
op = 20060001
|
||||
}
|
||||
SendPack(T);
|
||||
}
|
||||
|
||||
function GetWorldBossEventRankInfo() {
|
||||
local T = {
|
||||
op = 20060003,
|
||||
Page = 0
|
||||
}
|
||||
SendPack(T);
|
||||
}
|
||||
|
||||
function GetWorldBossEventBaseInfo() {
|
||||
local T = {
|
||||
op = 20060009,
|
||||
}
|
||||
SendPack(T);
|
||||
}
|
||||
//发包逻辑
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
constructor() {
|
||||
ItemInfoObject = {};
|
||||
//判断活动是否开启
|
||||
Pack_Control.rawset(20060002, GetWolrdBossEventStateCallBack.bindenv(this));
|
||||
//获取排名信息
|
||||
Pack_Control.rawset(20060004, GetWorldBossEventRankInfoCallBack.bindenv(this));
|
||||
//获取基础信息包
|
||||
Pack_Control.rawset(20060010, GetWorldBossEventBaseInfoCallBack.bindenv(this));
|
||||
//获取道具信息
|
||||
Pack_Control.rawset(20060020, GetWorldBossEventBaseItemInfoCallBack.bindenv(this));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GetWolrdBossEventState();
|
||||
GetWorldBossEventRankInfo();
|
||||
GetWorldBossEventBaseInfo();
|
||||
}
|
||||
|
||||
|
||||
//绘制道具带道具信息
|
||||
function DrawItemEx(X, Y, Id, Count) {
|
||||
L_sq_DrawImg("roters/rankmain.img", 9, X - 4, Y - 2);
|
||||
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
|
||||
ItemInfoDrawS = {};
|
||||
ItemInfoDrawS.X <- X;
|
||||
ItemInfoDrawS.Y <- Y;
|
||||
ItemInfoDrawS.ItemId <- Id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//绘制世界Boss渐出动画
|
||||
function ShowEventOpenAnimation(obj) {
|
||||
if (!EventAnimationPlayFlag) return;
|
||||
if (EventAnimationTimer == null) EventAnimationTimer = Clock();
|
||||
|
||||
local A = 60;
|
||||
if (EventAnimationTimer) {
|
||||
if (Clock() - EventAnimationTimer <= 2000) {
|
||||
A = sq_GetUniformVelocity(60, 255, Clock() - EventAnimationTimer, 2000);
|
||||
}
|
||||
if (Clock() - EventAnimationTimer <= 4000 && Clock() - EventAnimationTimer > 2000) {
|
||||
A = sq_GetUniformVelocity(255, 0, Clock() - EventAnimationTimer - 2000, 2000);
|
||||
}
|
||||
if (Clock() - EventAnimationTimer > 4000) {
|
||||
EventAnimationTimer = null;
|
||||
EventAnimationPlayFlag = false;
|
||||
} else {
|
||||
L_sq_DrawImg("roters/rankmain.img", 1, 80, 20, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y, 540, 470, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
L_sq_DrawImg("roters/rankmain.img", 0, X + 9, Y + 6);
|
||||
|
||||
//Boss血量
|
||||
setClip(X + 15, Y + 30, X + 15 + (532 * BOSS_HP_RATE).tointeger(), Y + 30 + 17); //开始裁切
|
||||
L_sq_DrawImg("roters/rankmain.img", 8, X + 15, Y + 30);
|
||||
releaseClip(); //裁切结束
|
||||
|
||||
//TODO 要判断这次攻坚是否成功了 成功了就不绘制
|
||||
L_sq_DrawImg("roters/rankmaineff.img", 0, X + 13, Y + 50);
|
||||
|
||||
|
||||
|
||||
//绘制奖励
|
||||
if (RewardInfo) {
|
||||
L_sq_DrawWindow(X + 10, Y + 228, 100, 48, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
L_sq_DrawCode("活动奖励预览", X + 24, Y + 240, sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
foreach(Pos, Value in RewardInfo) {
|
||||
DrawItemEx(X + 22 + (Pos * 34), Y + 264, Value, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//绘制排名
|
||||
if (RankInfo) {
|
||||
foreach(Pos, Value in RankInfo) {
|
||||
if (Pos< 10) {
|
||||
L_sq_DrawCode(Value.RankTop.tostring(), X + 46 - LenheartTextClass.GetStringLength(Value.RankTop.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
L_sq_DrawCode(Value.Name.tostring(), X + 158 - LenheartTextClass.GetStringLength(Value.Name.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
L_sq_DrawCode(Value.Job.tostring(), X + 310 - LenheartTextClass.GetStringLength(Value.Job.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
L_sq_DrawCode(Value.Damage.tostring(), X + 466 - LenheartTextClass.GetStringLength(Value.Damage.tostring()) / 2, Y + 324 + (Pos * 16), sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
} else {
|
||||
L_sq_DrawCode(Value.RankTop.tostring(), X + 46 - LenheartTextClass.GetStringLength(Value.RankTop.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
L_sq_DrawCode(Value.Name.tostring(), X + 158 - LenheartTextClass.GetStringLength(Value.Name.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
L_sq_DrawCode(Value.Job.tostring(), X + 310 - LenheartTextClass.GetStringLength(Value.Job.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
L_sq_DrawCode(Value.Damage.tostring(), X + 466 - LenheartTextClass.GetStringLength(Value.Damage.tostring()) / 2, Y + 486, sq_RGBA(251, 251, 181, 250), 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local AttackButton = LenheartTabbars(X + 11 + 50, Y + 215, 50, 17);
|
||||
AttackButton.SetFrame("roters/rankmain.img", 2);
|
||||
AttackButton.SyncPos(X + 499, Y + 501);
|
||||
AttackButton.Show();
|
||||
if (AttackButton.isLBActive()) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//开启界面回调
|
||||
function OpenClassCallBack() {
|
||||
|
||||
L_NewWindows("Lenheart", 170, 0x65535);
|
||||
local W = sq_GetPopupWindowMainCotrol(170);
|
||||
W.SetVisible(false);
|
||||
W.SetEnable(false);
|
||||
|
||||
|
||||
GetWorldBossEventRankInfo();
|
||||
}
|
||||
|
||||
|
||||
//绘制道具相信信息
|
||||
ItemObject = null;
|
||||
|
||||
function DrawItemInfo(obj) {
|
||||
if (ItemInfoDrawS && ItemInfoObject) {
|
||||
if (!ItemObject) {
|
||||
local ItemId = ItemInfoDrawS.ItemId;
|
||||
if (ItemInfoObject.rawin(ItemId)) {
|
||||
ItemObject = ItemInfoClass(ItemInfoObject[ItemId]);
|
||||
}
|
||||
}
|
||||
ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength);
|
||||
} else {
|
||||
ItemObject = null;
|
||||
}
|
||||
}
|
||||
|
||||
//绘制入口
|
||||
function Draw(obj) {
|
||||
ItemInfoDrawS = null;
|
||||
|
||||
if (MainState) {
|
||||
if (WindowObj) {
|
||||
DrawMain(obj);
|
||||
WindowObj.Show(obj);
|
||||
X = WindowObj.X;
|
||||
Y = WindowObj.Y;
|
||||
|
||||
DrawItemInfo(obj);
|
||||
} else {
|
||||
WindowObj = LenheartWindow(X, Y, 558, 470, 15); //坐标 大小 标题栏高度
|
||||
// WindowObj.DeBugMode = true;
|
||||
}
|
||||
} else {
|
||||
if (WindowObj && WindowObj.YMouseSw == false) {
|
||||
IMouse.ReleaseMouseClick();
|
||||
WindowObj.YMouseSw = true;
|
||||
WindowObj = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//播放活动开启过场动画
|
||||
// ShowEventOpenAnimation(obj);
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
if (KeyPressNB.isKeyPress(48, "New_RotersCloseKey")) {
|
||||
MainState = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function New_Roters(obj) {
|
||||
local RootTab = getroottable();
|
||||
if (!RootTab.rawin("New_RotersCObj")) {
|
||||
local Cobj = New_RotersC();
|
||||
RootTab.rawset("New_RotersCObj", Cobj);
|
||||
} else {
|
||||
RootTab["New_RotersCObj"].Proc(obj);
|
||||
RootTab["New_RotersCObj"].Draw(obj);
|
||||
}
|
||||
}
|
||||
if (getroottable().rawin("LenheartFuncTab")) {
|
||||
getroottable()["LenheartFuncTab"].rawset("New_Roters_LenheartFunc", New_Roters);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("New_Roters_LenheartFunc", New_Roters);
|
||||
getroottable().rawset("LenheartFuncTab", T);
|
||||
}
|
||||
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