模块

模块:TboxData

来自蒙纳多研究本部

此模块的文档可以在模块:TboxData/doc创建

-- 模块:TboxData —— 宝箱数据(硬编码快照 v1)
--
-- ⚠️ 本模块是**硬编码快照**,不是实时取数。原因:
--   线上 XB1DEData 未注册 FLD_tboxlist / Gimlist????,无法用 mw.xbdb 现取。
--   数据源:xc1de_full.db(XC1DE 2.0.0),2026-10-14 导出,已与线上 xbdb 逐条校对。
--
-- 数据链路(本地库,供日后切回实时取数参考):
--   位置:FLD_tboxlist.gimID → bdat_ma????.Gimlist????.posX/posY/posZ,再 ÷100
--   内容:FLD_tboxlist.itm1~4 → ITM_itemlist.__id → 按 itemType 路由到子表
--
-- 生成方式:由 .work/chests_final.json 自动生成,勿手改;
--   重跑 .work/chest_v3.py → 本模块生成脚本即可刷新。
--
-- 坐标说明:已 ÷100,与 XB1DEWikiMap 的 REST 坐标系一致
--   (REST /map/{id}/landmarks 与本地 landmarklist 19/19 一致,已验证)。

local p = {}

p.meta = {
  source = "xc1de_full.db (XC1DE 2.0.0)",
  generated = "2026-10-14",
  count = 20,
  live = false,  -- false = 硬编码快照;待 XB1DEData 注册后切 true
}

-- 地图出现顺序(按游戏进度)
p.mapOrder = { "ma0501", "ma0601", "ma0901", "ma1001", "ma1202", "ma1301", "ma2501" }

-- 20 个宝箱。字段:
--   id       FLD_tboxlist.__id(宝箱序号,1~20)
--   gimID    FLD_tboxlist.gimID(机关 ID,指向 Gimlist????)
--   map      地图 id_name(对应 XB1DEWikiMap 的 data-map-name)
--   mapName  地图中文名
--   x/y/z    坐标(Gimlist ÷100,可直接落图)
--   landmark 最近地标(由 landmarklist 算欧氏距离得出)
--   dist     到最近地标的距离(游戏内单位)
--   items    箱内物品中文名(按 itm1~4 原序,已剔除空位)
p.chests = {
  {
    id = 1, gimID = 173,
    map = "ma0501", mapName = "磷光之地扎托尔",
    x = 1379.1, y = 303.3, z = 643.0,
    landmark = "姊妹石像最上层", dist = 28.3,
    items = { "昏厥时间延长", "恩典帽子" },
  },
  {
    id = 2, gimID = 222,
    map = "ma0601", mapName = "玛格纳原始森林",
    x = -664.8, y = -80.3, z = -503.8,
    landmark = "玛格纳林道", dist = 189.2,
    items = { "蒙纳多纪录书“噬”", "战斗之魂" },
  },
  {
    id = 3, gimID = 281,
    map = "ma0901", mapName = "海恩塔墓地",
    x = 350.4, y = -127.2, z = -95.3,
    landmark = "第2宝藏库", dist = 9.8,
    items = { "召雷术", "红宝石眼镜" },
  },
  {
    id = 4, gimID = 280,
    map = "ma0901", mapName = "海恩塔墓地",
    x = 412.0, y = -149.3, z = 101.8,
    landmark = "王家宝藏库", dist = 7.6,
    items = { "全减益效果抗性", "恩典手套", "恩典鞋子" },
  },
  {
    id = 5, gimID = 364,
    map = "ma1001", mapName = "艾尔特海",
    x = 348.2, y = 38.5, z = 1609.0,
    landmark = "龙人的海滨", dist = 493.2,
    items = { "背面攻击强化", "武者之靴", "阿尔戈斯护盔" },
  },
  {
    id = 6, gimID = 365,
    map = "ma1001", mapName = "艾尔特海",
    x = -1780.0, y = 2.2, z = -566.6,
    landmark = "兜帽族的隐居处", dist = 129.6,
    items = { "倒地时间延长", "透视眼镜", "阿尔戈斯护腕" },
  },
  {
    id = 7, gimID = 465,
    map = "ma1202", mapName = "监狱岛",
    x = -290.4, y = 65.2, z = 134.2,
    landmark = "第1圣器室", dist = 14.3,
    items = { "以太爆裂", "东方眼镜", "阿尔戈斯靴子", "以太Ⅴ型护目镜" },
  },
  {
    id = 8, gimID = 466,
    map = "ma1202", mapName = "监狱岛",
    x = -308.9, y = 65.2, z = 134.2,
    landmark = "第1圣器室", dist = 13.8,
    items = { "代达罗斯", "大师眼镜", "恩典上衣", "以太Ⅴ型骨架" },
  },
  {
    id = 9, gimID = 467,
    map = "ma1202", mapName = "监狱岛",
    x = -151.2, y = 65.2, z = -134.2,
    landmark = "第2圣器室", dist = 14.0,
    items = { "雷萨德", "泰坦臂甲", "恩典裤子", "以太Ⅴ型机关" },
  },
  {
    id = 10, gimID = 468,
    map = "ma1202", mapName = "监狱岛",
    x = -132.7, y = 65.2, z = -134.2,
    landmark = "第2圣器室", dist = 14.1,
    items = { "三位一体", "泰坦铁靴", "阿尔戈斯盔甲", "以太Ⅴ型助推器" },
  },
  {
    id = 11, gimID = 469,
    map = "ma1202", mapName = "监狱岛",
    x = -243.8, y = 1.6, z = 49.2,
    landmark = "中央会堂", dist = 75.0,
    items = { "会心上升", "康加玛托", "阿尔戈斯护腿", "恩典上衣" },
  },
  {
    id = 12, gimID = 470,
    map = "ma1202", mapName = "监狱岛",
    x = -243.8, y = 1.6, z = -49.2,
    landmark = "中央会堂", dist = 75.0,
    items = { "EXP获得量上升", "龙杖阿卡拉兹", "泰坦头盔", "恩典裤子" },
  },
  {
    id = 13, gimID = 542,
    map = "ma1301", mapName = "瓦拉克雪山",
    x = -1277.0, y = -210.3, z = -1343.7,
    landmark = "三圣贤山峰", dist = 113.8,
    items = { "泰坦板甲", "泰坦胫甲", "爱尔迪浮翼", "终末双刃" },
  },
  {
    id = 14, gimID = 1003,
    map = "ma2501", mapName = "巨神肩",
    x = 712.0, y = -53.3, z = 200.9,
    landmark = "古岚戴尔城墙", dist = 45.6,
    items = { "最大HP上升" },
  },
  {
    id = 15, gimID = 1004,
    map = "ma2501", mapName = "巨神肩",
    x = 442.0, y = -1.4, z = -71.8,
    landmark = "亚基尼空中庭园遗迹", dist = 77.4,
    items = { "武艺的教导", "仇恨值上升" },
  },
  {
    id = 16, gimID = 1005,
    map = "ma2501", mapName = "巨神肩",
    x = 1234.6, y = -55.3, z = 701.0,
    landmark = "雄伟拱门", dist = 119.0,
    items = { "散热片" },
  },
  {
    id = 17, gimID = 1006,
    map = "ma2501", mapName = "巨神肩",
    x = 1313.4, y = -106.3, z = 1276.8,
    landmark = "祈福雕像的石碑", dist = 270.1,
    items = { "达人的教导" },
  },
  {
    id = 18, gimID = 1007,
    map = "ma2501", mapName = "巨神肩",
    x = -1492.2, y = -54.5, z = -676.0,
    landmark = "马尔嘉的悲泪", dist = 79.4,
    items = { "仙人的教导" },
  },
  {
    id = 19, gimID = 1008,
    map = "ma2501", mapName = "巨神肩",
    x = -531.4, y = 28.6, z = -676.0,
    landmark = "调查团驻扎遗址", dist = 108.2,
    items = { "前人的教导", "雷属性强化" },
  },
  {
    id = 20, gimID = 1009,
    map = "ma2501", mapName = "巨神肩",
    x = -1643.0, y = 117.0, z = 176.7,
    landmark = "奈尔维思墓地", dist = 85.3,
    items = { "双重攻击" },
  },
}

-- 按地图分组(渲染用)
function p.byMap()
  local out = {}
  for _, c in ipairs(p.chests) do
    out[c.map] = out[c.map] or { name = c.mapName, list = {} }
    table.insert(out[c.map].list, c)
  end
  return out
end

-- 按 id 取单个宝箱
function p.get(id)
  id = tonumber(id)
  for _, c in ipairs(p.chests) do
    if c.id == id then return c end
  end
  return nil
end

return p