Rindro-Sqr/Project/FatalismStone/FatalismStone_BackPack.nut

107 lines
3.3 KiB
Plaintext

/*
文件名: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");