111
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
//魂石list
|
||||
FatalismStoneLst <- null;
|
||||
FatalismStoneConfig <- null;
|
||||
//魂石Img主体
|
||||
FatalismStone_StoneImg <- {};
|
||||
FatalismStone_StoneImg["icon_Frame"] <- Rindro_Image("interface2/rindro_reward.img");
|
||||
@@ -19,13 +20,10 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
// NoWindow = true;
|
||||
|
||||
//是否可见
|
||||
Visible = false;
|
||||
// Visible = false;
|
||||
|
||||
//Img
|
||||
Img = null;
|
||||
|
||||
//属性数据位数
|
||||
AttrCount = 2;
|
||||
//总格子数
|
||||
GridCount = 77;
|
||||
//总穿戴数
|
||||
@@ -33,21 +31,31 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
|
||||
//功能标题
|
||||
FunctionTitle = null;
|
||||
//功能页面
|
||||
FunctionPage = 0;
|
||||
//Ani任务队列
|
||||
AniQueue = null;
|
||||
|
||||
|
||||
//背包数据
|
||||
BackPackData = null;
|
||||
//背包页面
|
||||
BackpackPage = 0;
|
||||
//背包页面Tabbars
|
||||
BackpackPageTabbars = null;
|
||||
//魂石数据
|
||||
FatalismStoneData = null;
|
||||
//页面魂石集合
|
||||
PageFatalismStoneLst = null;
|
||||
|
||||
//穿戴魂石集合
|
||||
WearFatalismStoneLst = null;
|
||||
|
||||
//穿戴页面坐标数组
|
||||
WearPagePos = [131, 140, 32, 180, 234, 180, 32, 272, 234, 272, 131, 413];
|
||||
|
||||
|
||||
//洗练对象
|
||||
WashStone = null;
|
||||
|
||||
|
||||
//查询魂石背包数据
|
||||
function QueryFatalismStoneBackpack() {
|
||||
SendPackEx({
|
||||
@@ -61,70 +69,29 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
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);
|
||||
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);
|
||||
InitPageFatalismStone();
|
||||
}.bindenv(this));
|
||||
|
||||
//请求魂石数据
|
||||
QueryFatalismStoneBackpack();
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(738, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
@@ -161,9 +128,6 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
}.bindenv(this);
|
||||
FunctionTitle.append(FuncTabbar4);
|
||||
|
||||
|
||||
|
||||
|
||||
local Tabbars3 = LenheartNewUI_TabbarsText(302, 235, "天魂石");
|
||||
Tabbars3.SetTextOffset(13, 4);
|
||||
Tabbars3.State = 1;
|
||||
@@ -203,50 +167,41 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
InitPageFatalismStone();
|
||||
}.bindenv(this);
|
||||
BackpackPageTabbars.append(Tabbars5);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
//初始化背包
|
||||
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);
|
||||
}
|
||||
if (!BackPackData) return;
|
||||
//设置需要渲染的当前背包页面
|
||||
PageFatalismStoneLst = BackPackData.GetList(BackpackPage);
|
||||
WearFatalismStoneLst = BackPackData.GetList(3);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
@@ -265,22 +220,48 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
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);
|
||||
}
|
||||
|
||||
//洗练页面
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
//绘制魂石
|
||||
//背包中的魂石
|
||||
if (PageFatalismStoneLst) {
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
// sq_DrawBox(X + Stone.XPos, Y + Stone.YPos, 34,34, 0xffffffff);
|
||||
Stone.Show(obj, X + Stone.XPos, Y + Stone.YPos);
|
||||
local XPos = 310 + (Pos % 11 * 39);
|
||||
local YPos = 260 + (Pos / 11 * 35);
|
||||
if (Stone) Stone.Show(obj, X + XPos, 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 (Stone) Stone.Show(obj, X + XPos, Y + YPos);
|
||||
}
|
||||
}
|
||||
AniQueue.Run();
|
||||
}
|
||||
|
||||
|
||||
function TopShow(obj) {
|
||||
LenheartNewUI_Windows.TopShow(obj);
|
||||
//还没有初始化数据的时候直接返回
|
||||
@@ -289,8 +270,30 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
//绘制拖拽的魂石
|
||||
@@ -299,89 +302,158 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标右键按下回调
|
||||
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;
|
||||
DragType = null;
|
||||
|
||||
//鼠标左键按下回调
|
||||
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_BaseWindow.OnMouseLbDown(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, 34, 34)) {
|
||||
if (Stone.isSuccess) {
|
||||
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) {
|
||||
DragObj = Stone;
|
||||
PageFatalismStoneLst[Pos] = FatalismStone_Stone(null);
|
||||
PageFatalismStoneLst[Pos].InitializeData(DragObj.BackupInfo);
|
||||
PageFatalismStoneLst[Pos] = null;
|
||||
DragOldPos = Pos;
|
||||
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; //身上的拖拽
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//鼠标左键抬起回调
|
||||
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, 34, 34)) {
|
||||
if (PageFatalismStoneLst) {
|
||||
foreach(Pos, Stone in PageFatalismStoneLst) {
|
||||
local XPos = 310 + (Pos % 11 * 39);
|
||||
local YPos = 260 + (Pos / 11 * 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
|
||||
})
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) {
|
||||
StoneMoveLogic(Pos, Stone);
|
||||
}
|
||||
|
||||
//播放移动声音
|
||||
R_Utils.PlaySound(DragObj.Info["move wav"]);
|
||||
|
||||
//放回原位
|
||||
PageFatalismStoneLst[DragOldPos] = DragObj;
|
||||
DragObj = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Cetshi = 0;
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
|
||||
if (Clock() - Cetshi > 100) {
|
||||
Cetshi = Clock();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//记录最新属性数据
|
||||
if ("LenheartAttributesTable" in getroottable()) {
|
||||
local T = getroottable()["LenheartAttributesTable"];
|
||||
T.rawset("LenheartCollectFatalismStoneAb", AttributeTable);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("LenheartCollectFatalismStoneAb", AttributeTable);
|
||||
getroottable().rawset("LenheartAttributesTable", T);
|
||||
}
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
//初始化PVF魂石列表
|
||||
function InitFatalismStoneLst() {
|
||||
FatalismStoneLst = {};
|
||||
Rindro_Script.GetFileData("fatalismstone/fatalismstone.lst", function(DataTable, Data) {
|
||||
@@ -391,16 +463,29 @@ class FatalismStoneC extends LenheartNewUI_Windows {
|
||||
FatalismStoneLst.rawset(Id, Path);
|
||||
}
|
||||
});
|
||||
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()];
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function InitImg() {
|
||||
Img = {};
|
||||
Img["main"] <- Rindro_Image("hud/fatalism_stone.img");
|
||||
AniQueue = QuestQueue();
|
||||
}
|
||||
|
||||
function OpenCallBack() {
|
||||
Visible = true;
|
||||
QueryFatalismStoneBackpack();
|
||||
WashStone = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
107
Project/FatalismStone/FatalismStone_BackPack.nut
Normal file
107
Project/FatalismStone/FatalismStone_BackPack.nut
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
文件名:FatalismStone_BackPack.nut
|
||||
路径:Project/FatalismStone/FatalismStone_BackPack.nut
|
||||
创建日期:2025-08-27 17:54
|
||||
文件用途:魂石背包类
|
||||
*/
|
||||
|
||||
//魂石背包类
|
||||
class FatalismStone_BackPack {
|
||||
|
||||
//背包总格子数
|
||||
GridCount = 77;
|
||||
//穿戴总格子数
|
||||
WearCount = 6;
|
||||
|
||||
StoneArr = null;
|
||||
|
||||
|
||||
constructor() {
|
||||
StoneArr = [];
|
||||
|
||||
//魂石单个数据回包
|
||||
Rindro_BaseToolClass.RegisterHexPack(21000012, function(Pack) {
|
||||
local Uuid = Pack.GetInt();
|
||||
local Info = {
|
||||
Cultivation = Pack.GetInt().tofloat() * 0.01,
|
||||
}
|
||||
foreach(StoneObject in StoneArr) {
|
||||
if (!StoneObject) continue;
|
||||
if (StoneObject.Uuid == Uuid) {
|
||||
StoneObject.InitializeData(Info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}.bindenv(this));
|
||||
|
||||
//魂石多个数据回包
|
||||
Rindro_BaseToolClass.RegisterHexPack(21000014, function(Pack) {
|
||||
local Count = Pack.GetInt();
|
||||
for (local i = 0; i< Count; i++) {
|
||||
local Uuid = Pack.GetInt();
|
||||
local Info = {
|
||||
Cultivation = Pack.GetInt().tofloat() * 0.01,
|
||||
}
|
||||
foreach(StoneObject in StoneArr) {
|
||||
if (!StoneObject) continue;
|
||||
if (StoneObject.Uuid == Uuid) {
|
||||
StoneObject.InitializeData(Info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}.bindenv(this));
|
||||
}
|
||||
|
||||
//通过数据构造背包 反序列化
|
||||
function Deserialize(N_Data) {
|
||||
local BackpackData = N_Data[0];
|
||||
local WearData = N_Data[1];
|
||||
|
||||
//转换背包数据
|
||||
local BackPackArr = [];
|
||||
for (local i = 0; i<(GridCount * 3); i++) {
|
||||
local StoneId = BackpackData.add(i * 8).readInt();
|
||||
local StoneUuid = BackpackData.add(i * 8 + 4).readInt();
|
||||
if (StoneId != 0 && StoneUuid != 0) {
|
||||
local StoneObj = FatalismStone_Stone(StoneId);
|
||||
StoneObj.Stone_Type = i / GridCount;
|
||||
StoneObj.Uuid = StoneUuid;
|
||||
BackPackArr.append(StoneObj);
|
||||
} else {
|
||||
BackPackArr.append(null);
|
||||
}
|
||||
}
|
||||
//转化穿戴数据
|
||||
local WearArr = [];
|
||||
for (local i = 0; i< WearCount; i++) {
|
||||
local StoneId = WearData.add(i * 8).readInt();
|
||||
local StoneUuid = WearData.add(i * 8 + 4).readInt();
|
||||
if (StoneId != 0 && StoneUuid != 0) {
|
||||
local StoneObj = FatalismStone_Stone(StoneId);
|
||||
StoneObj.Uuid = StoneUuid;
|
||||
WearArr.append(StoneObj);
|
||||
} else {
|
||||
WearArr.append(null);
|
||||
}
|
||||
}
|
||||
|
||||
//两段数据放入总数据
|
||||
StoneArr.extend(BackPackArr);
|
||||
StoneArr.extend(WearArr);
|
||||
}
|
||||
|
||||
//获取魂石的列表 3为身上穿戴的
|
||||
function GetList(Page) {
|
||||
local SliceLength = GridCount;
|
||||
if (Page == 3) SliceLength = WearCount;
|
||||
return StoneArr.slice(Page * 77, Page * 77 + SliceLength);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
L_Windows_List <- [];
|
||||
getroottable().rawdelete("LenheartPluginsInitFlag");
|
||||
getroottable().rawdelete("EventList_Obj")
|
||||
getroottable().rawdelete("FatalismStone_Obj");
|
||||
@@ -32,6 +32,10 @@ FatalismStone_AttrTagDrawOrder <- ["[physical attack]", "[magical attack]", "[ph
|
||||
|
||||
|
||||
class FatalismStone_Stone {
|
||||
//唯一ID
|
||||
Uuid = null;
|
||||
//魂石ID
|
||||
Id = null;
|
||||
//数据
|
||||
Info = null;
|
||||
//显示偏移位置
|
||||
@@ -42,6 +46,10 @@ class FatalismStone_Stone {
|
||||
|
||||
//完成Flag
|
||||
isSuccess = false;
|
||||
//唯一属性加载Flag
|
||||
isInitializeData = false;
|
||||
//唯一属性请求Flag
|
||||
isInitializeRequestData = false;
|
||||
|
||||
constructor(Arg) {
|
||||
if (Arg != null) {
|
||||
@@ -54,6 +62,7 @@ class FatalismStone_Stone {
|
||||
FatalismStoneLst.rawset(Arg, Buf);
|
||||
}
|
||||
Initialize(Buf);
|
||||
Id = Arg;
|
||||
} else printf("FatalismStone_Stone:没有找到Id为" + Arg + "的魂石");
|
||||
}
|
||||
isSuccess = true;
|
||||
@@ -74,13 +83,14 @@ class FatalismStone_Stone {
|
||||
|
||||
//悬停
|
||||
function HoverShow(X, Y) {
|
||||
|
||||
//绘制悬停框
|
||||
L_sq_SetDrawImgModel(2, 0);
|
||||
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X - 31 + 1, Y + 1);
|
||||
L_sq_ReleaseDrawImgModel();
|
||||
|
||||
if (!isSuccess) return;
|
||||
if (!isInitializeRequestData) {
|
||||
isInitializeRequestData = true;
|
||||
Rindro_BaseToolClass.SendPackEx({
|
||||
op = 21000011,
|
||||
uuid = Uuid
|
||||
})
|
||||
}
|
||||
//基础长度50
|
||||
local Height = 50;
|
||||
Height += Info.Attribute.len() * 14; //计算属性带来的高度加成
|
||||
@@ -178,23 +188,15 @@ class FatalismStone_Stone {
|
||||
|
||||
//初始化数据
|
||||
function InitializeData(info) {
|
||||
BackupInfo = info;
|
||||
//同步位置
|
||||
XPos = info.XPos;
|
||||
YPos = info.YPos;
|
||||
|
||||
//如果是没有ID的通过传入的数据确定魂石类型
|
||||
if (Stone_Type == null) Stone_Type = info.StoneType;
|
||||
|
||||
|
||||
if (!isSuccess) return;
|
||||
//得到洗练度
|
||||
local Rate = info.CultivationDegree;
|
||||
local Rate = info.Cultivation;
|
||||
Info.cultivationDegree = (Rate * 100.0);
|
||||
//计算属性
|
||||
foreach(Key, value in Info.Attribute) {
|
||||
Info.Attribute[Key] = (value[0] + (value[1] - value[0]) * Rate).tointeger();
|
||||
local BaseValueArr = FatalismStoneLst[Id].Attribute[Key];
|
||||
Info.Attribute[Key] = (BaseValueArr[0] + (BaseValueArr[1] - BaseValueArr[0]) * Rate).tointeger();
|
||||
}
|
||||
isInitializeData = true;
|
||||
}
|
||||
|
||||
//品级颜色
|
||||
|
||||
Reference in New Issue
Block a user