2025-06-30 00:25:43 +08:00
|
|
|
/*
|
|
|
|
|
文件名:FatalismStone.nut
|
|
|
|
|
路径:Project/FatalismStone/FatalismStone.nut
|
|
|
|
|
创建日期:2025-06-18 11:00
|
|
|
|
|
文件用途:FatalismStone
|
|
|
|
|
*/
|
|
|
|
|
//魂石list
|
|
|
|
|
FatalismStoneLst <- null;
|
2025-10-14 09:17:56 +08:00
|
|
|
FatalismStoneConfig <- null;
|
2025-06-30 00:25:43 +08:00
|
|
|
//魂石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;
|
|
|
|
|
|
|
|
|
|
//是否可见
|
2025-10-14 09:17:56 +08:00
|
|
|
// Visible = false;
|
2025-06-30 00:25:43 +08:00
|
|
|
|
|
|
|
|
//Img
|
|
|
|
|
Img = null;
|
|
|
|
|
//总格子数
|
|
|
|
|
GridCount = 77;
|
|
|
|
|
//总穿戴数
|
|
|
|
|
WearCount = 6;
|
|
|
|
|
|
|
|
|
|
//功能标题
|
|
|
|
|
FunctionTitle = null;
|
2025-10-14 09:17:56 +08:00
|
|
|
//功能页面
|
|
|
|
|
FunctionPage = 0;
|
|
|
|
|
//Ani任务队列
|
|
|
|
|
AniQueue = null;
|
|
|
|
|
|
2025-06-30 00:25:43 +08:00
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
//背包数据
|
|
|
|
|
BackPackData = null;
|
2025-06-30 00:25:43 +08:00
|
|
|
//背包页面
|
|
|
|
|
BackpackPage = 0;
|
|
|
|
|
//背包页面Tabbars
|
|
|
|
|
BackpackPageTabbars = null;
|
|
|
|
|
//页面魂石集合
|
|
|
|
|
PageFatalismStoneLst = null;
|
2025-10-14 09:17:56 +08:00
|
|
|
//穿戴魂石集合
|
|
|
|
|
WearFatalismStoneLst = null;
|
2025-06-30 00:25:43 +08:00
|
|
|
|
|
|
|
|
//穿戴页面坐标数组
|
|
|
|
|
WearPagePos = [131, 140, 32, 180, 234, 180, 32, 272, 234, 272, 131, 413];
|
|
|
|
|
|
|
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
//洗练对象
|
|
|
|
|
WashStone = null;
|
|
|
|
|
|
|
|
|
|
|
2025-06-30 00:25:43 +08:00
|
|
|
//查询魂石背包数据
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
//背包数据回包
|
2025-10-14 09:17:56 +08:00
|
|
|
RegisterHexPack(21000002, function(Pack) {
|
|
|
|
|
local Data = [];
|
|
|
|
|
local BackPackSize = Pack.GetInt();
|
|
|
|
|
local BackPackDataBuffer = Pack.GetStream(BackPackSize);
|
|
|
|
|
Data.append(BackPackDataBuffer);
|
|
|
|
|
local WearSize = Pack.GetInt();
|
|
|
|
|
local WearDataBuffer = Pack.GetStream(WearSize);
|
|
|
|
|
Data.append(WearDataBuffer);
|
|
|
|
|
BackPackData = FatalismStone_BackPack();
|
|
|
|
|
BackPackData.Deserialize(Data);
|
2025-06-30 00:25:43 +08:00
|
|
|
InitPageFatalismStone();
|
|
|
|
|
}.bindenv(this));
|
2025-10-14 09:17:56 +08:00
|
|
|
//请求魂石数据
|
2025-06-30 00:25:43 +08:00
|
|
|
QueryFatalismStoneBackpack();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RegisterWidget() {
|
2025-08-27 08:45:37 +08:00
|
|
|
//关闭按钮
|
|
|
|
|
local CloseButton = LenheartNewUI_BaseButton(738, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
|
|
|
|
CloseButton.OnClick = function() {
|
|
|
|
|
this.Visible = false;
|
|
|
|
|
}.bindenv(this);
|
|
|
|
|
Childrens.append(CloseButton);
|
2025-06-30 00:25:43 +08:00
|
|
|
|
|
|
|
|
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);
|
2025-10-14 09:17:56 +08:00
|
|
|
|
|
|
|
|
local WashButton = LenheartNewUI_ButtonText(483, 182, 24, "洗练");
|
|
|
|
|
WashButton.OnClickSound = "ICON_QUICK_SET";
|
|
|
|
|
WashButton.SetTextOffset(9, 1);
|
|
|
|
|
WashButton.OnClick = function() {
|
|
|
|
|
if (FunctionPage == 0 && WashStone) {
|
|
|
|
|
SendPackEx({
|
|
|
|
|
op = 21000005,
|
|
|
|
|
uuid = WashStone.Uuid,
|
|
|
|
|
rarity = WashStone.Info["rarity"],
|
|
|
|
|
});
|
|
|
|
|
AniQueue.AddQuest("洗练特效动画", function(Name, Time) {
|
|
|
|
|
local AniPath = "fatalismstone/animation/eff1.ani";
|
|
|
|
|
local Ani = DrawAniEx(X + 440, Y + 32, AniPath, "魂石洗练特效");
|
|
|
|
|
if (sq_GetAnimationFrameIndex(Ani) == 15) {
|
|
|
|
|
sq_Rewind(Ani);
|
|
|
|
|
AniQueue.RemoveQuest(Name);
|
|
|
|
|
}
|
|
|
|
|
}.bindenv(this));
|
|
|
|
|
R_Utils.PlaySound("BUTTON_06");
|
|
|
|
|
}
|
|
|
|
|
}.bindenv(this);
|
|
|
|
|
WashButton.SetCallBackFunc(function(Btn) {
|
|
|
|
|
if (FunctionPage != 0) Btn.Visible = false;
|
|
|
|
|
else Btn.Visible = true;
|
|
|
|
|
}.bindenv(this))
|
|
|
|
|
AddChild(WashButton);
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//初始化背包
|
|
|
|
|
function InitPageFatalismStone() {
|
2025-10-14 09:17:56 +08:00
|
|
|
if (!BackPackData) return;
|
|
|
|
|
//设置需要渲染的当前背包页面
|
|
|
|
|
PageFatalismStoneLst = BackPackData.GetList(BackpackPage);
|
|
|
|
|
WearFatalismStoneLst = BackPackData.GetList(3);
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//绘制主界面
|
|
|
|
|
function DrawMain(obj) {
|
|
|
|
|
Img["main"].DrawPng(0, X, Y);
|
|
|
|
|
|
2025-08-27 08:45:37 +08:00
|
|
|
L_sq_DrawCode("宿命魂石", X + 362, Y + 3, sq_RGBA(221, 197, 147, 250), 1, 1);
|
|
|
|
|
|
2025-06-30 00:25:43 +08:00
|
|
|
//绘制自身人物
|
|
|
|
|
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);
|
|
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
//洗练页面
|
|
|
|
|
if (FunctionPage == 0) {
|
|
|
|
|
//绘制洗练槽
|
|
|
|
|
Img["main"].DrawPng(2, X + 500, Y + 90);
|
|
|
|
|
if (WashStone) {
|
|
|
|
|
local NowCultivationDegree = "当前魂石洗练度: " + WashStone.Info.cultivationDegree.tostring();
|
|
|
|
|
local NeedStkStr = FatalismStoneConfig["wash_cost"][WashStone.Info["rarity"]] + "个";
|
|
|
|
|
L_sq_DrawCode("当前魂石洗练度: ", X + 471, Y + 140, sq_RGBA(174, 174, 174, 250), 1, 1);
|
|
|
|
|
L_sq_DrawCode("洗练所需魂屑: ", X + 473, Y + 160, sq_RGBA(174, 174, 174, 250), 1, 1);
|
|
|
|
|
L_sq_DrawCode(WashStone.Info.cultivationDegree.tostring() + "%", X + 560, Y + 140, sq_RGBA(104, 237, 161, 250), 1, 1);
|
|
|
|
|
L_sq_DrawCode(NeedStkStr, X + 552, Y + 160, sq_RGBA(104, 237, 161, 250), 1, 1);
|
|
|
|
|
WashStone.Show(obj, X + 505, Y + 95);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
|
|
|
|
|
function Show(obj) {
|
|
|
|
|
DrawMain(obj);
|
|
|
|
|
LenheartNewUI_Windows.Show(obj);
|
|
|
|
|
//绘制魂石
|
2025-10-14 09:17:56 +08:00
|
|
|
//背包中的魂石
|
2025-06-30 00:25:43 +08:00
|
|
|
if (PageFatalismStoneLst) {
|
|
|
|
|
foreach(Pos, Stone in PageFatalismStoneLst) {
|
2025-10-14 09:17:56 +08:00
|
|
|
local XPos = 310 + (Pos % 11 * 39);
|
|
|
|
|
local YPos = 260 + (Pos / 11 * 35);
|
|
|
|
|
if (Stone) Stone.Show(obj, X + XPos, Y + YPos);
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
2025-10-14 09:17:56 +08:00
|
|
|
//穿戴的魂石
|
|
|
|
|
if (WearFatalismStoneLst) {
|
|
|
|
|
foreach(Pos, Stone in WearFatalismStoneLst) {
|
|
|
|
|
local XPos = WearPagePos[Pos * 2];
|
|
|
|
|
local YPos = WearPagePos[Pos * 2 + 1];
|
|
|
|
|
XPos += 5;
|
|
|
|
|
YPos += 5;
|
|
|
|
|
if (Stone) Stone.Show(obj, X + XPos, Y + YPos);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AniQueue.Run();
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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) {
|
2025-10-14 09:17:56 +08:00
|
|
|
local XPos = 310 + (Pos % 11 * 39);
|
|
|
|
|
local YPos = 260 + (Pos / 11 * 35);
|
|
|
|
|
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 31, 31)) {
|
|
|
|
|
//绘制悬停框
|
|
|
|
|
L_sq_SetDrawImgModel(2, 0);
|
|
|
|
|
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + XPos + 1, Y + YPos + 1);
|
|
|
|
|
L_sq_ReleaseDrawImgModel();
|
|
|
|
|
if (Stone && !DragObj) Stone.HoverShow(X + XPos + 31, Y + YPos);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//魂石穿戴的悬停绘制
|
|
|
|
|
if (WearFatalismStoneLst) {
|
|
|
|
|
foreach(Pos, Stone in WearFatalismStoneLst) {
|
|
|
|
|
local XPos = WearPagePos[Pos * 2];
|
|
|
|
|
local YPos = WearPagePos[Pos * 2 + 1];
|
|
|
|
|
XPos += 5;
|
|
|
|
|
YPos += 5;
|
|
|
|
|
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 31, 31)) {
|
|
|
|
|
//绘制悬停框
|
|
|
|
|
L_sq_SetDrawImgModel(2, 0);
|
|
|
|
|
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + XPos + 1, Y + YPos + 1);
|
|
|
|
|
L_sq_ReleaseDrawImgModel();
|
|
|
|
|
if (Stone && !DragObj) Stone.HoverShow(X + XPos + 31, Y + YPos);
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//绘制拖拽的魂石
|
|
|
|
|
if (DragObj) {
|
|
|
|
|
DragObj.Show(obj, IMouse.GetXPos() - 15, IMouse.GetYPos() - 15);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//当前拖拽的物品对象
|
|
|
|
|
DragObj = null;
|
|
|
|
|
DragOldPos = null;
|
2025-10-14 09:17:56 +08:00
|
|
|
DragType = null;
|
2025-06-30 00:25:43 +08:00
|
|
|
|
|
|
|
|
//鼠标左键按下回调
|
|
|
|
|
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
|
|
|
|
LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y);
|
2025-10-14 09:17:56 +08:00
|
|
|
if (!PageFatalismStoneLst) return;
|
2025-06-30 00:25:43 +08:00
|
|
|
foreach(Pos, Stone in PageFatalismStoneLst) {
|
2025-10-14 09:17:56 +08:00
|
|
|
local XPos = 310 + (Pos % 11 * 39);
|
|
|
|
|
local YPos = 260 + (Pos / 11 * 35);
|
|
|
|
|
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) {
|
|
|
|
|
if (Stone && Stone.isSuccess) {
|
2025-06-30 00:25:43 +08:00
|
|
|
DragObj = Stone;
|
2025-10-14 09:17:56 +08:00
|
|
|
PageFatalismStoneLst[Pos] = null;
|
2025-06-30 00:25:43 +08:00
|
|
|
DragOldPos = Pos;
|
2025-10-14 09:17:56 +08:00
|
|
|
DragType = 1; //背包中的拖拽
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (WearFatalismStoneLst) {
|
|
|
|
|
foreach(Pos, Stone in WearFatalismStoneLst) {
|
|
|
|
|
local XPos = WearPagePos[Pos * 2];
|
|
|
|
|
local YPos = WearPagePos[Pos * 2 + 1];
|
|
|
|
|
XPos += 5;
|
|
|
|
|
YPos += 5;
|
|
|
|
|
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) {
|
|
|
|
|
if (Stone) {
|
|
|
|
|
DragObj = Stone;
|
|
|
|
|
WearFatalismStoneLst[Pos] = null;
|
|
|
|
|
DragOldPos = Pos + (GridCount * 3);
|
|
|
|
|
DragType = 0; //身上的拖拽
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//鼠标左键抬起回调
|
|
|
|
|
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
|
|
|
|
LenheartNewUI_BaseWindow.OnMouseLbUp(MousePos_X, MousePos_Y);
|
2025-10-14 09:17:56 +08:00
|
|
|
if (PageFatalismStoneLst) {
|
|
|
|
|
foreach(Pos, Stone in PageFatalismStoneLst) {
|
|
|
|
|
local XPos = 310 + (Pos % 11 * 39);
|
|
|
|
|
local YPos = 260 + (Pos / 11 * 35);
|
2025-06-30 00:25:43 +08:00
|
|
|
if (DragObj) {
|
2025-10-14 09:17:56 +08:00
|
|
|
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) {
|
|
|
|
|
StoneMoveLogic(Pos, Stone);
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
2025-10-14 09:17:56 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (WearFatalismStoneLst) {
|
|
|
|
|
foreach(Pos, Stone in WearFatalismStoneLst) {
|
|
|
|
|
local XPos = WearPagePos[Pos * 2];
|
|
|
|
|
local YPos = WearPagePos[Pos * 2 + 1];
|
|
|
|
|
XPos += 5;
|
|
|
|
|
YPos += 5;
|
|
|
|
|
if (DragObj) {
|
|
|
|
|
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) {
|
|
|
|
|
StoneMoveLogic((GridCount * 3) + Pos, Stone);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//洗练的区域
|
|
|
|
|
if (FunctionPage == 0 && sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + 500, Y + 90, 42, 42)) {
|
|
|
|
|
if (DragObj) {
|
|
|
|
|
WashStone = DragObj;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
if (DragObj) {
|
|
|
|
|
//播放移动声音
|
|
|
|
|
R_Utils.PlaySound(DragObj.Info["move wav"]);
|
|
|
|
|
//放回原位
|
|
|
|
|
if (DragType == 1) PageFatalismStoneLst[DragOldPos] = DragObj;
|
|
|
|
|
else if (DragType == 0) WearFatalismStoneLst[DragOldPos - (GridCount * 3)] = DragObj;
|
|
|
|
|
DragObj = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
function StoneMoveLogic(Pos, Stone) {
|
|
|
|
|
local OldEType = DragObj.Stone_Type; //老装备类型
|
|
|
|
|
local NewEType; //新装备类型
|
|
|
|
|
//如果新位置有魂石 获取到新的穿戴类型
|
|
|
|
|
if (Stone) NewEType = Stone.Stone_Type;
|
|
|
|
|
else {
|
|
|
|
|
//这是往身上拖
|
|
|
|
|
if (Pos >= GridCount * 3) {
|
|
|
|
|
local RealPos = Pos - (GridCount * 3);
|
|
|
|
|
if (RealPos == 0) NewEType = 0;
|
|
|
|
|
if (RealPos >= 1 && RealPos <= 4) NewEType = 1;
|
|
|
|
|
if (RealPos == 5) NewEType = 2;
|
|
|
|
|
}
|
|
|
|
|
//这是往背包拖
|
|
|
|
|
else {
|
|
|
|
|
NewEType = BackpackPage;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//如果两个类型相同则进行交换 相同位置也不发包
|
|
|
|
|
if (OldEType == NewEType && DragOldPos != Pos) {
|
|
|
|
|
//老装备的页面位置
|
|
|
|
|
SendPackEx({
|
|
|
|
|
op = 21000003,
|
|
|
|
|
oldtype = DragType == 1 ? BackpackPage : 3,
|
|
|
|
|
oldpos = DragType == 1 ? DragOldPos : DragOldPos - (GridCount * 3),
|
|
|
|
|
newtype = Pos >= (GridCount * 3) ? 3 : BackpackPage,
|
|
|
|
|
newpos = Pos >= (GridCount * 3) ? Pos - (GridCount * 3) : Pos
|
|
|
|
|
})
|
|
|
|
|
QueryFatalismStoneBackpack();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//计算全身属性
|
|
|
|
|
function StatisticalAttribute() {
|
|
|
|
|
local AttributeTable = {};
|
|
|
|
|
local WearStoneList = BackPackData.GetList(3);
|
|
|
|
|
for (local i = 0; i< WearStoneList.len(); i++) {
|
|
|
|
|
local StoneObj = WearStoneList[i];
|
|
|
|
|
if (StoneObj) {
|
|
|
|
|
local Att = StoneObj.GetAttribute();
|
|
|
|
|
if (Att) {
|
|
|
|
|
foreach(key, value in Att) {
|
|
|
|
|
local RealValue = value;
|
|
|
|
|
if (typeof RealValue == "array") RealValue = RealValue[0];
|
|
|
|
|
if (!AttributeTable.rawin(key)) AttributeTable.rawset(key, value);
|
|
|
|
|
else AttributeTable.rawset(key, AttributeTable.rawget(key) + value);
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-10-14 09:17:56 +08:00
|
|
|
//记录最新属性数据
|
|
|
|
|
if ("LenheartAttributesTable" in getroottable()) {
|
|
|
|
|
local T = getroottable()["LenheartAttributesTable"];
|
|
|
|
|
T.rawset("LenheartCollectFatalismStoneAb", AttributeTable);
|
|
|
|
|
} else {
|
|
|
|
|
local T = {};
|
|
|
|
|
T.rawset("LenheartCollectFatalismStoneAb", AttributeTable);
|
|
|
|
|
getroottable().rawset("LenheartAttributesTable", T);
|
|
|
|
|
}
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//逻辑入口
|
|
|
|
|
function Proc(obj) {
|
|
|
|
|
LenheartNewUI_Windows.SyncPos(X, Y);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
//初始化PVF魂石列表
|
2025-06-30 00:25:43 +08:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
});
|
2025-10-14 09:17:56 +08:00
|
|
|
FatalismStoneConfig = Rindro_Script.GetFileData("fatalismstone/fatalismstone.etc", function(DataTable, Data) {
|
|
|
|
|
while (!Data.Eof()) {
|
|
|
|
|
local Str = Data.Get();
|
|
|
|
|
if (Str == "[wash item]") {
|
|
|
|
|
DataTable.wash_item <- Data.Get();
|
|
|
|
|
} else if (Str == "[wash cost]") {
|
|
|
|
|
DataTable.wash_cost <- [Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get()];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
|
2025-10-14 09:17:56 +08:00
|
|
|
|
2025-06-30 00:25:43 +08:00
|
|
|
function InitImg() {
|
|
|
|
|
Img = {};
|
|
|
|
|
Img["main"] <- Rindro_Image("hud/fatalism_stone.img");
|
2025-10-14 09:17:56 +08:00
|
|
|
AniQueue = QuestQueue();
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function OpenCallBack() {
|
|
|
|
|
Visible = true;
|
|
|
|
|
QueryFatalismStoneBackpack();
|
2025-10-14 09:17:56 +08:00
|
|
|
WashStone = null;
|
2025-06-30 00:25:43 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-16 15:21:32 +08:00
|
|
|
getroottable()["LenheartFuncTab"].rawset("FatalismStoneFuncN", Lenheart_FatalismStone_Fun);
|