Skip to content

yimo0908/FFXIVBlindBoxPlugin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

109 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BlindBoxPlugin

用来统计盲盒中物品获得情况的插件。支持特殊配给货箱、庆典礼物箱、上锁的宝箱、九宫幻卡包、能源包、宇宙好运道信用点等多种容器,一键查看已获得与未获得的物品。

image1.png

功能

  • 查看各类盲盒中包含的所有物品及其获得状态
  • 物品按颜色区分状态:
    • 🟢 绿色 — 已获得
    • ⬜ 白色 — 未获得,可交易
    • ⬛ 灰色 — 未获得,不可交易
  • * 标记的物品为仅可从当前途径获取
  • 支持按「所有 / 已获得 / 未获得」筛选显示
  • 盲盒按系列分组,支持下拉框快速筛选系列
  • 左侧盲盒列表 + 右侧物品详情的双栏布局
  • 直接渲染游戏内物品图标
  • 点击物品名称自动复制到剪切板、发送带品质颜色的物品链接到聊天框,并弹出游戏内提示
  • 配置自动保存(当前选中的盲盒、系列筛选、显示模式)
  • 设置界面提供物品名称 → 物品 ID 批量查询工具

支持的盲盒类型

分类     名称                          
特殊配给货箱 特殊配给货箱(重生/苍穹)、特殊配给货箱(红莲)     
庆典礼物箱  庆典礼物箱                       
无人岛    无人岛特殊配给货箱                   
上锁的宝箱  常风地带、恒冰地带、涌火地带、丰水地带、南方战线、高原 
九宫幻卡包  白金包、铜包、银包、金包、灵银包、帝国包、梦想包    
能源包    俄匊斯能源包、奥克塞西亚能源包             
宇宙好运道  月球信用点、法恩娜信用点、俄匊斯信用点、奥克塞西亚信用点
死者宫殿   铜饰宝藏、铁饰宝藏、银饰宝藏、金饰宝藏         
天之御柱   白银宝藏、黄金宝藏、白金宝藏              
正统优雷卡  银辉宝藏、金辉宝藏、铂辉宝藏              
神圣交错路  银光宝藏、金光宝藏、铂光宝藏              

使用方法

命令 说明
/blindbox 打开盲盒信息界面
/blindbox config 打开设置界面

也可通过卫月插件列表中的「打开主界面」/「打开设置」按钮访问。

How to get

  1. 卫月设置 → 测试版
  2. 添加仓库 https://raw.githubusercontent.com/yimo0908/DalamudPlugin/main/repo.json 并启用
  3. 从插件列表中安装

项目结构

FFXIVBlindBoxPlugin/
├── BlindBoxPlugin/                 # 插件主项目
│   ├── BlindBoxPlugin.csproj       # 项目文件,SDK 为 Dalamud.CN.NET.Sdk
│   ├── BlindBoxPlugin.json         # 插件元数据(名称、描述、图标等)
│   ├── blind_boxes.json            # 盲盒数据(嵌入式资源,编译时打包进 DLL)
│   ├── Plugin.cs                   # 插件入口,注册命令与窗口
│   ├── Configuration.cs            # 插件配置(选中的盲盒 ID、系列筛选、显示模式)
│   ├── Data.cs                     # 盲盒数据加载与查找表 BlindBoxInfoMap
│   ├── Models.cs                   # DisplayMode 枚举
│   ├── GameFunctions.cs            # 物品解锁状态检测
│   └── Windows/
│       ├── MainWindows.cs          # 主窗口:布局、盲盒选择列表、物品表格
│       ├── MainWindows.Draw.cs     # 主窗口:图标绘制、颜色状态、* 标记
│       └── MainWindows.Game.cs     # 主窗口:聊天链接、剪切板复制、游戏内提示
├── images/                         # 截图与图标
├── BlindBoxPlugin.sln              # 解决方案文件
├── LICENSE                         # MIT 许可证
└── README.md

核心文件说明

文件 职责
Plugin.cs 插件入口点,注册 /blindbox 命令,初始化 MainWindowConfigWindow,提供 ItemSheet 等静态服务访问
Data.cs 盲盒数据的加载入口。从嵌入式资源 blind_boxes.json 读取分组与首盒数据,构建 BlindBoxInfoMap 查找表和 SeriesGroups 系列分组
Models.cs DisplayMode 枚举(所有/已获得/未获得)控制显示筛选
GameFunctions.cs 通过 FFXIVClientStructs 的 UIState->IsItemActionUnlocked 判断物品是否已解锁
Configuration.cs 持久化配置:当前选中的盲盒 ID、系列筛选索引和显示模式
MainWindows.*.cs 主窗口使用 partial class 拆分为三个文件,分别负责布局、绘制和游戏交互。通过 UpdateConfig 统一修改并保存配置

维护说明

本地构建

前提:.NET 10 SDK,XIVLauncher / Dalamud 已安装(用于运行插件)

构建:

dotnet build BlindBoxPlugin\BlindBoxPlugin.csproj -c Debug

安装(开发者模式):

  1. 构建后获取 BlindBoxPlugin.dll(位于 bin\x64\Debug\
  2. 在 Dalamud 设置 → Experimental → Dev Plugin Locations 中添加 DLL 所在文件夹路径
  3. 在 Dalamud 插件管理器的 Dev Tools 中启用已加载的开发插件

新增或更新盲盒数据

盲盒数据存储在 BlindBoxPlugin/blind_boxes.json 中,作为嵌入式资源编译进 DLL。新增或修改盲盒只需编辑此 JSON 文件:

[
  {
    "name": "系列名称",
    "boxes": [
      {
        "id": 36635,
        "name": "盲盒名称",
        "items": [6003, 6004, 6005],
        "uniqueItems": [6003]
      }
    ]
  }
]

字段说明

字段 类型 说明
name(系列级) string 系列分组名称,显示在下拉筛选框中
boxes array 该系列下的所有盲盒条目
id uint 盲盒道具 ID
name(首盒级) string 盲盒名称(仅用于 JSON 可读性,运行时从 ExcelSheet 获取)
items uint[] 盲盒包含的所有物品 ID
uniqueItems uint[] 仅可从当前途径获取的物品 ID(可选,界面中显示 * 标记)

关于 UniqueItems:标记为 unique 的物品在界面中会显示 * 前缀,表示该物品仅可从当前盲盒途径获取。如果某物品可通过多种途径获得,则不应加入 unique 列表。

获取物品 ID:可使用设置界面(/blindbox config →「获取物品Id」标签页)输入物品名称批量查询 ID,也可通过 Garland Tools 或游戏解包数据查找。

开发约定

  • ExcelSheet 访问:统一使用 Plugin.ItemSheet 获取物品表,避免散布的 GetExcelSheet<Item>() 调用
  • 配置修改:使用 UpdateConfig(Action<Configuration>) 方法修改并自动保存配置,防止遗漏 Save() 调用
  • 物品名称:统一使用 Name.ExtractText() 获取纯文本名称,不使用 Name.ToString()
  • 可见性BlindBoxInfopublic 类,BlindBoxGroupJSON / BlindBoxEntryJSONinternal DTO,仅插件内部使用

解锁检测原理

GameFunctions.IsUnlocked(Item item) 通过以下方式判断物品是否已获得:

  1. 调用 ExdModule.GetItemRowById 获取物品的 EXD 行数据
  2. 调用 UIState.Instance()->IsItemActionUnlocked(row) 检查物品动作是否已解锁
  3. 返回 1 表示已解锁(已获得),其他值表示未获得

该方法依赖 FFXIVClientStructs 的原生函数,游戏大版本更新后可能需要更新 ClientStructs 绑定。

ActionType 参考

以下列出 GameFunctions.IsUnlocked 涉及的物品动作类型(ActionType)及其 RowId,供维护时参考。该枚举已从源码中移除,仅保留为文档:

ActionType RowId 说明
Companion 853 宠物
BuddyEquip 1013 鸟甲
Mount 1322 坐骑
SecretRecipeBook 2136 秘籍
UnlockLink 2633 解锁链接(骑乘图、青魔法图腾、情感动作/舞蹈、发型等)
TripleTriadCard 3357 九宫幻卡
FolkloreTome 4107 传承录
OrchestrionRoll 25183 管弦乐琴乐谱
FramersKit 29459 画框套装
Ornament 20086 时装配件
Glasses 37312 眼镜
CompanySealVouchers 41120 军团券(use = 在军团中,is unlocked = 始终 false)

Credits

License

MIT

About

最终幻想14盲盒插件

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C# 100.0%