杂项
This commit is contained in:
416
Project/FatalismStone/FatalismStone.nut
Normal file
416
Project/FatalismStone/FatalismStone.nut
Normal file
@@ -0,0 +1,416 @@
|
||||
/*
|
||||
文件名:FatalismStone.nut
|
||||
路径:Project/FatalismStone/FatalismStone.nut
|
||||
创建日期:2025-06-18 11:00
|
||||
文件用途:FatalismStone
|
||||
*/
|
||||
//魂石list
|
||||
FatalismStoneLst <- null;
|
||||
//魂石Img主体
|
||||
FatalismStone_StoneImg <- {};
|
||||
FatalismStone_StoneImg["icon_Frame"] <- Rindro_Image("interface2/rindro_reward.img");
|
||||
FatalismStone_StoneImg["fatalism_stone_progressbar"] <- Rindro_Image("hud/fatalism_stone_progressbar.img");
|
||||
|
||||
class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//不是窗口
|
||||
// NoWindow = true;
|
||||
|
||||
//是否可见
|
||||
Visible = false;
|
||||
|
||||
//Img
|
||||
Img = null;
|
||||
|
||||
//属性数据位数
|
||||
AttrCount = 2;
|
||||
//总格子数
|
||||
GridCount = 77;
|
||||
//总穿戴数
|
||||
WearCount = 6;
|
||||
|
||||
//功能标题
|
||||
FunctionTitle = null;
|
||||
|
||||
//背包页面
|
||||
BackpackPage = 0;
|
||||
//背包页面Tabbars
|
||||
BackpackPageTabbars = null;
|
||||
//魂石数据
|
||||
FatalismStoneData = null;
|
||||
//页面魂石集合
|
||||
PageFatalismStoneLst = null;
|
||||
|
||||
|
||||
//穿戴页面坐标数组
|
||||
WearPagePos = [131, 140, 32, 180, 234, 180, 32, 272, 234, 272, 131, 413];
|
||||
|
||||
|
||||
//查询魂石背包数据
|
||||
function QueryFatalismStoneBackpack() {
|
||||
SendPackEx({
|
||||
op = 21000001,
|
||||
})
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
FunctionTitle = [];
|
||||
BackpackPageTabbars = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
InitImg();
|
||||
|
||||
|
||||
//初始化魂石列表
|
||||
InitFatalismStoneLst();
|
||||
|
||||
//背包数据回包
|
||||
RegisterPack(21000002, function(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
FatalismStoneData = [];
|
||||
//三个背包页
|
||||
for (local j = 0; j< 3; j++) {
|
||||
local Buf = [];
|
||||
//每个背包页77格道具
|
||||
for (local i = 0; i< GridCount; i++) {
|
||||
local Obj = Jso.BackPackData[i + (j * GridCount)];
|
||||
local _Id = Obj.id;
|
||||
local _CultivationDegree = Obj.cultivationDegree;
|
||||
Buf.append({
|
||||
Id = _Id,
|
||||
CultivationDegree = _CultivationDegree / 100.0,
|
||||
XPos = 310 + (i % 11 * 39),
|
||||
YPos = 260 + (i / 11 * 35),
|
||||
StoneType = j
|
||||
});
|
||||
}
|
||||
FatalismStoneData.append(Buf);
|
||||
}
|
||||
//穿戴页
|
||||
local WearBuf = [];
|
||||
for (local i = 0; i< WearCount; i++) {
|
||||
local Obj = Jso.WearData[i];
|
||||
|
||||
local _Id = Obj.id;
|
||||
local _CultivationDegree = Obj.cultivationDegree;
|
||||
|
||||
local _Xpos = WearPagePos[i * 2];
|
||||
local _Ypos = WearPagePos[i * 2 + 1];
|
||||
_Xpos += 5;
|
||||
_Ypos += 5;
|
||||
|
||||
local infoBuf = {
|
||||
Id = _Id,
|
||||
CultivationDegree = _CultivationDegree / 100.0,
|
||||
XPos = _Xpos,
|
||||
YPos = _Ypos,
|
||||
};
|
||||
if (i == 0) infoBuf.StoneType <- 0;
|
||||
else if (i >= 1 && i <= 4) infoBuf.StoneType <- 1;
|
||||
else if (i == 5) infoBuf.StoneType <- 2;
|
||||
WearBuf.append(infoBuf);
|
||||
}
|
||||
FatalismStoneData.append(WearBuf);
|
||||
InitPageFatalismStone();
|
||||
}.bindenv(this));
|
||||
|
||||
|
||||
|
||||
QueryFatalismStoneBackpack();
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
local FuncTabbar1 = LenheartNewUI_TabbarsText(302, 27, "洗练");
|
||||
FuncTabbar1.State = 1;
|
||||
AddChild(FuncTabbar1);
|
||||
FuncTabbar1.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
FunctionTitle.append(FuncTabbar1);
|
||||
|
||||
local FuncTabbar2 = LenheartNewUI_TabbarsText(364, 27, "合成");
|
||||
AddChild(FuncTabbar2);
|
||||
FuncTabbar2.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
FunctionTitle.append(FuncTabbar2);
|
||||
|
||||
local FuncTabbar3 = LenheartNewUI_TabbarsText(426, 27, "分解");
|
||||
AddChild(FuncTabbar3);
|
||||
FuncTabbar3.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
FunctionTitle.append(FuncTabbar3);
|
||||
|
||||
local FuncTabbar4 = LenheartNewUI_TabbarsText(488, 27, "注魂");
|
||||
AddChild(FuncTabbar4);
|
||||
FuncTabbar4.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
FunctionTitle.append(FuncTabbar4);
|
||||
|
||||
|
||||
|
||||
|
||||
local Tabbars3 = LenheartNewUI_TabbarsText(302, 235, "天魂石");
|
||||
Tabbars3.SetTextOffset(13, 4);
|
||||
Tabbars3.State = 1;
|
||||
AddChild(Tabbars3);
|
||||
Tabbars3.OnClickEx = function(Button) {
|
||||
foreach(button in BackpackPageTabbars) {
|
||||
button.State = 0;
|
||||
}
|
||||
Button.State = 1;
|
||||
BackpackPage = 0;
|
||||
InitPageFatalismStone();
|
||||
}.bindenv(this);
|
||||
BackpackPageTabbars.append(Tabbars3);
|
||||
|
||||
local Tabbars4 = LenheartNewUI_TabbarsText(364, 235, "人魂石");
|
||||
Tabbars4.SetTextOffset(13, 4);
|
||||
AddChild(Tabbars4);
|
||||
Tabbars4.OnClickEx = function(Button) {
|
||||
foreach(button in BackpackPageTabbars) {
|
||||
button.State = 0;
|
||||
}
|
||||
Button.State = 1;
|
||||
BackpackPage = 1;
|
||||
InitPageFatalismStone();
|
||||
}.bindenv(this);
|
||||
BackpackPageTabbars.append(Tabbars4);
|
||||
|
||||
local Tabbars5 = LenheartNewUI_TabbarsText(426, 235, "地魂石");
|
||||
Tabbars5.SetTextOffset(13, 4);
|
||||
AddChild(Tabbars5);
|
||||
Tabbars5.OnClickEx = function(Button) {
|
||||
foreach(button in BackpackPageTabbars) {
|
||||
button.State = 0;
|
||||
}
|
||||
Button.State = 1;
|
||||
BackpackPage = 2;
|
||||
InitPageFatalismStone();
|
||||
}.bindenv(this);
|
||||
BackpackPageTabbars.append(Tabbars5);
|
||||
}
|
||||
|
||||
//初始化背包
|
||||
function InitPageFatalismStone() {
|
||||
// if (!BackpackData || BackpackData.len() == 0) return;
|
||||
if (!FatalismStoneData) return;
|
||||
local SubBackPack = FatalismStoneData[BackpackPage];
|
||||
local ItArr = SubBackPack;
|
||||
foreach(value in FatalismStoneData[3]) {
|
||||
ItArr.append(value);
|
||||
}
|
||||
PageFatalismStoneLst = [];
|
||||
foreach(info in ItArr) {
|
||||
local StoneBuf;
|
||||
if (!info.Id) StoneBuf = FatalismStone_Stone(null);
|
||||
else StoneBuf = FatalismStone_Stone(info.Id);
|
||||
StoneBuf.InitializeData(info);
|
||||
PageFatalismStoneLst.append(StoneBuf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//计算全身的属性
|
||||
local AttributeTable = {};
|
||||
for (local i = GridCount; i< GridCount + WearCount; i++) {
|
||||
local StoneObj = PageFatalismStoneLst[i];
|
||||
local Att = StoneObj.GetAttribute();
|
||||
if (Att) {
|
||||
foreach(key, value in Att) {
|
||||
if (!AttributeTable.rawin(key)) AttributeTable.rawset(key, value);
|
||||
else AttributeTable.rawset(key, AttributeTable.rawget(key) + value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//记录最新属性数据
|
||||
if ("LenheartAttributesTable" in getroottable()) {
|
||||
local T = getroottable()["LenheartAttributesTable"];
|
||||
T.rawset("LenheartCollectFatalismStoneAb", AttributeTable);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("LenheartCollectFatalismStoneAb", AttributeTable);
|
||||
getroottable().rawset("LenheartAttributesTable", T);
|
||||
}
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
Img["main"].DrawPng(0, X, Y);
|
||||
|
||||
//绘制自身人物
|
||||
local charAni = sq_GetCNRDObjectToSQRCharacter(obj).sq_GetRestAni();
|
||||
sq_AnimationProc(charAni);
|
||||
sq_drawCurrentFrame(charAni, X + 153, Y + 370, false);
|
||||
|
||||
//绘制右侧背景
|
||||
L_sq_DrawWindow(X + 300, Y + 44, 420, 160, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); //上背景框
|
||||
L_sq_DrawWindow(X + 300, Y + 253, 420, 220, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); //下背景框
|
||||
|
||||
Img["main"].DrawPng(1, X + 309, Y + 259);
|
||||
}
|
||||
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
//绘制魂石
|
||||
if (PageFatalismStoneLst) {
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
Stone.Show(obj, X + Stone.XPos, Y + Stone.YPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function TopShow(obj) {
|
||||
LenheartNewUI_Windows.TopShow(obj);
|
||||
//还没有初始化数据的时候直接返回
|
||||
if (!PageFatalismStoneLst) return;
|
||||
local MousePos_X = IMouse.GetXPos();
|
||||
local MousePos_Y = IMouse.GetYPos();
|
||||
//魂石的悬停绘制
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 31, 31)) {
|
||||
Stone.HoverShow(X + Stone.XPos + 31, Y + Stone.YPos);
|
||||
}
|
||||
}
|
||||
//绘制拖拽的魂石
|
||||
if (DragObj) {
|
||||
DragObj.Show(obj, IMouse.GetXPos() - 15, IMouse.GetYPos() - 15);
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标右键按下回调
|
||||
function OnMouseRbDown(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_BaseWindow.OnMouseRbDown(MousePos_X, MousePos_Y);
|
||||
if (PageFatalismStoneLst) {
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 31, 31)) {
|
||||
// //发送穿戴装备包
|
||||
// SendPackEx({
|
||||
// op = 21000003,
|
||||
// type = BackpackPage,
|
||||
// pos = Pos
|
||||
// })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//当前拖拽的物品对象
|
||||
DragObj = null;
|
||||
DragOldPos = null;
|
||||
|
||||
//鼠标左键按下回调
|
||||
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y);
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 39, 35)) {
|
||||
if (Stone.isSuccess) {
|
||||
DragObj = Stone;
|
||||
PageFatalismStoneLst[Pos] = FatalismStone_Stone(null);
|
||||
PageFatalismStoneLst[Pos].InitializeData(DragObj.BackupInfo);
|
||||
DragOldPos = Pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//鼠标左键抬起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_BaseWindow.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
if (!PageFatalismStoneLst) return;
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 39, 35)) {
|
||||
if (DragObj) {
|
||||
//获取到旧的穿戴类型
|
||||
local OldEType = DragObj.Stone_Type;
|
||||
//获取到新的穿戴类型
|
||||
local NewEType = Stone.Stone_Type;
|
||||
|
||||
//如果两个类型相同则进行交换 相同位置也不发包
|
||||
if (OldEType == NewEType && DragOldPos != Pos) {
|
||||
SendPackEx({
|
||||
op = 21000003,
|
||||
oldtype = DragOldPos >= GridCount ? -1 : BackpackPage,
|
||||
oldpos = DragOldPos >= GridCount ? (DragOldPos - GridCount) : DragOldPos,
|
||||
newtype = Pos >= GridCount ? -1 : BackpackPage,
|
||||
newpos = Pos >= GridCount ? (Pos - GridCount) : Pos
|
||||
})
|
||||
}
|
||||
|
||||
//播放移动声音
|
||||
R_Utils.PlaySound(DragObj.Info["move wav"]);
|
||||
|
||||
//放回原位
|
||||
PageFatalismStoneLst[DragOldPos] = DragObj;
|
||||
DragObj = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
function InitFatalismStoneLst() {
|
||||
FatalismStoneLst = {};
|
||||
Rindro_Script.GetFileData("fatalismstone/fatalismstone.lst", function(DataTable, Data) {
|
||||
while (!Data.Eof()) {
|
||||
local Id = Data.Get();
|
||||
local Path = Data.Get();
|
||||
FatalismStoneLst.rawset(Id, Path);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function InitImg() {
|
||||
Img = {};
|
||||
Img["main"] <- Rindro_Image("hud/fatalism_stone.img");
|
||||
}
|
||||
|
||||
function OpenCallBack() {
|
||||
Visible = true;
|
||||
QueryFatalismStoneBackpack();
|
||||
}
|
||||
}
|
||||
|
||||
L_Windows_List <- [];
|
||||
getroottable().rawdelete("LenheartPluginsInitFlag");
|
||||
getroottable().rawdelete("EventList_Obj")
|
||||
getroottable().rawdelete("FatalismStone_Obj");
|
||||
|
||||
function Lenheart_FatalismStone_Fun(obj) {
|
||||
local RootTab = getroottable();
|
||||
if (!RootTab.rawin("FatalismStone_Obj")) {
|
||||
RootTab.rawset("FatalismStone_Obj", true);
|
||||
local Win = LenheartNewUI_CreateWindow(FatalismStoneC, "宿命魂石窗口", ((getroottable().Rindro_Scr_Width - 753) / 2).tointeger(), 35, 753, 518, 20);
|
||||
|
||||
EventList_Obj.AddEvent("宿命魂石", 280, Win, "interface2/hud/information_button/information_button_cn.img");
|
||||
}
|
||||
}
|
||||
|
||||
getroottable()["LenheartFuncTab"].rawset("FatalismStoneFuncN", Lenheart_FatalismStone_Fun);
|
||||
|
||||
Reference in New Issue
Block a user