Rindro-Sqr/Project/Shapeshifting/Shapeshifting.nut

168 lines
5.0 KiB
Plaintext

/*
文件名:Shapeshifting.nut
路径:Project/Shapeshifting/Shapeshifting.nut
创建日期:2024-08-24 23:53
文件用途:时装变身
*/
class ShapeshiftingC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
//信息
Info = null;
//服务器装备配置
SeverEquInfo = null;
ShapeMonsterId = null;
//初始化时间
Timer = 0;
//是否已经变身
IsShapeshifting = false;
//收到信息包
function GetInfoCallBack(Chunk) {
if (!this) return;
local Jso = Json.Decode(Chunk);
SeverEquInfo = Jso.info;
X = Jso.btnX;
Y = Jso.btnY;
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
Timer = Clock();
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
//信息包
Pack_Control.rawset(20074002, GetInfoCallBack.bindenv(this));
}
function RegisterWidget() {
//关闭按钮
local OpenButton = LenheartNewUI_BaseButton(0, 0, 28, 28, "interface2/yosin/bianshen.img", 0);
OpenButton.OnClick = function() {
if (ShapeMonsterId) {
L_sq_SendPackType(214);
L_sq_SendPackByte(2);
L_sq_SendPackWord(ShapeMonsterId);
L_sq_SendPack();
IsShapeshifting = true;
}
}.bindenv(this);
OpenButton.SetCallBackFunc(function(Button) {
if (!IsShapeshifting) {
Button.Localtion_X = 0;
} else {
Button.Localtion_X = -90000;
}
}.bindenv(this))
Childrens.append(OpenButton);
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(0, 0, 28, 28, "interface2/yosin/bianshen.img", 4);
CloseButton.OnClick = function() {
if (ShapeMonsterId) {
L_sq_SendPackType(215);
L_sq_SendPack();
IsShapeshifting = false;
}
}.bindenv(this);
CloseButton.SetCallBackFunc(function(Button) {
if (!IsShapeshifting) {
Button.Localtion_X = -90000;
} else {
Button.Localtion_X = 0;
}
}.bindenv(this))
Childrens.append(CloseButton);
}
//绘制主界面
function DrawMain(obj) {
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
function CheckPlayerInfoToSeverShapeInfo() {
if (!SeverEquInfo) return;
local Toubu = L_sq_GetCharacterAttribute(0x1C, 14);
local Maozi = L_sq_GetCharacterAttribute(0x1C, 13);
local Lianbu = L_sq_GetCharacterAttribute(0x1C, 15);
local Guanghuan = L_sq_GetCharacterAttribute(0x1C, 22);
local Xiongbu = L_sq_GetCharacterAttribute(0x1C, 19);
local Shangyi = L_sq_GetCharacterAttribute(0x1C, 16);
local Pifu = L_sq_GetCharacterAttribute(0x1C, 21);
local Yaobu = L_sq_GetCharacterAttribute(0x1C, 20);
local Xiazhuang = L_sq_GetCharacterAttribute(0x1C, 17);
local Xie = L_sq_GetCharacterAttribute(0x1C, 18);
foreach(v in SeverEquInfo) {
if (v.Toubu != Toubu && v.Toubu != 0) continue;
if (v.Maozi != Maozi && v.Maozi != 0) continue;
if (v.Lianbu != Lianbu && v.Lianbu != 0) continue;
if (v.Guanghuan != Guanghuan && v.Guanghuan != 0) continue;
if (v.Xiongbu != Xiongbu && v.Xiongbu != 0) continue;
if (v.Shangyi != Shangyi && v.Shangyi != 0) continue;
if (v.Pifu != Pifu && v.Pifu != 0) continue;
if (v.Yaobu != Yaobu && v.Yaobu != 0) continue;
if (v.Xiazhuang != Xiazhuang && v.Xiazhuang != 0) continue;
if (v.Xie != Xie && v.Xie != 0) continue;
ShapeMonsterId = v.MonsterId;
return;
}
ShapeMonsterId = null;
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
//每五秒获取一次本地数据信息
if (Clock() - Timer >= 1000) {
CheckPlayerInfoToSeverShapeInfo();
}
if ("RepairWorldMap_Obj" in getroottable()) {
if (RepairWorldMap_Obj.OpenState || sq_GetCurrentModuleType() != 1) {
Visible = false;
} else {
if (!ShapeMonsterId) {
Visible = false;
} else {
Visible = true;
}
}
}
}
}
getroottable().rawdelete("Shapeshifting_Obj");
function Lenheart_Shapeshifting_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("Shapeshifting_Obj")) {
RootTab.rawset("Shapeshifting_Obj", true);
LenheartNewUI_CreateWindow(ShapeshiftingC, "时装变身窗口", 430, 500, 28, 28, 0);
}
}
getroottable()["LenheartFuncTab"].rawset("ShapeshiftingFuncN", Lenheart_Shapeshifting_Fun);