Releases: SunYanbox/RaidRecord
Releases · SunYanbox/RaidRecord
v0.7.2
完善测试架构并增强路径安全校验机制
- 新增功能: 构建单元测试框架与 CI 环境
- 初始化 RaidRecord.Tests 项目,配置 TargetFramework 为 net9.0 并引入 MSTest 依赖
- 在 RaidRecord.sln 中注册新测试项目 GUID 及构建规则
- 将 CI Runner 从 Ubuntu 切换至 Windows 以解决跨平台测试兼容性问题
- 修复问题: 强化文件路径访问控制逻辑
- 实现
IsSubFilePath静态方法,利用Path.GetFullPath规范化路径并阻止非授权目录访问 - 修正父目录分隔符处理逻辑,确保
normalizedParent变量正确结尾以避免相对路径解析异常 - 增加
parentDir和subFilePath参数的空值及空白字符串校验,防止异常抛出 - 修复构建脚本中缺失的 7-Zip 可执行文件存在性检查 (
Exists('D:\Program Files\7-Zip\7z.exe')) - 优化模组拷贝条件,增加
Exists('$(SPTPath)')判断以防止 SPT 路径为空导致的构建错误
- 实现
- 重构优化: 统一依赖管理与项目配置
- 移除 SuntionCore 系列 DLL 的本地文件引用,迁移为 NuGet 包 (版本 1.2.0 和 1.0.0)
- 标准化测试项目配置,将
<TargetFrameworks>调整为单目标<TargetFramework>
- 文档更新: 补充核心逻辑测试用例
- 创建
RecordManagerTest.cs类,覆盖TestFuncIsSubFilePath用例场景包括深层嵌套、跳出目录、UNC 路径等
- 创建
- 破坏性变更: 无
- 其他: 更新项目版本号至 0.7.2
病毒检测报告: RaidRecord-0.7.2.7z
v0.7.1
[新增功能]
- 价格计算模式配置:引入可配置的基础价格计算策略,支持三种模式
Handbook:使用手册价格AvgRagfair:使用跳蚤市场平均价格Auto:自动选择最优价格来源
- Web界面配置:新增价格计算方式下拉选择组件,支持三种模式的图形化配置
- 多语言支持:为价格模式配置添加中、英、韩文界面文本
[重构优化]
- 简化价格系统:重写价格获取逻辑,移除冗余的依赖注入(PaymentHelper、HandbookHelper、DatabaseService、RagfairOfferService),替换为统一的RagfairController
- 清理遗留代码:删除复杂的跳蚤报价遍历逻辑及私有方法GetAveragePriceFromOffers
[变更]
- 默认配置调整:价格计算模式默认值为AvgRagfair
病毒检测报告:RaidRecord-0.7.1.7z
v0.7.0
新增功能
- 战绩收藏系统
- 支持将重要战绩添加至收藏夹,防止误删
- 新增收藏状态视觉标识(绿色标记)
- 增加“只显示收藏”筛选开关,便于快速定位重要记录
- 收藏状态自动持久化存储
优化与改进
-
数据模型优化
RaidArchive新增MapId属性,采用惰性填充策略提升性能- 移除过时的状态流转逻辑,简化数据结构
- 优化旧数据兼容性处理
-
价值计算规则调整
- 移除对
Scabbard(刀鞘)的价值归零限制,允许正常计价, 解决“零元购”刀具的问题 - 从战备价值中显式排除刀具 (
BaseClasses.KNIFE) 与安全箱物品
- 移除对
移除项
- 移除
RaidInfo和RaidArchive中未使用的State属性 - 删除
EFTCombatRecord.ArchivedRecords计算属性及相关状态流转逻辑
病毒检测报告:
RaidRecord-0.7.0.7z
v0.6.13
新增
-
国际化支持
- 为统计页面导航链接添加多语言支持 (
webUI.navStatsPage),现已支持中文、英文、韩文显示 - 为设置页面的“修复存档”按钮添加
MudTooltip提示,详细说明该功能的使用场景与注意事项(webUI.fixArchiveDesc)
- 为统计页面导航链接添加多语言支持 (
-
日志系统增强
RaidRecordMod新增静态Logger属性 (ModLogger),便于各组件统一日志输出- 为多个页面和组件添加关键流程的 Debug/Info 级别日志记录:
Home- 账号初始化流程RecordsList- 删除记录操作PricePage、QuickEquipmentWidget- 购买物资的详细参数ClaimCompensationWidget- 理赔操作(记录账户ID、金额、成功/失败状态)
- 在
ProfileInfoWidget、SptInfoMudCard、BotProfileInfoCard等组件的生命周期方法中增加对SptProfile为空的 Warn 级别日志
-
异常处理优化
- 图表组件 (
GroupByExistAndMapBarChart、GroupBySideChart) 在数据为空时调用logger.Error并传入ArgumentNullException,提供完整堆栈信息 - 在
PricePage和QuickEquipmentWidget的购买逻辑中使用try-catch包裹JsonUtil.Serialize调用,防止序列化失败导致主流程中断
- 图表组件 (
-
功能优化
ModConfig类中暴露SptLogger属性,便于 Razor 页面直接访问 SPT 原生日志接口- 为
SettingPage.FixAllArchive方法增加 Debug 日志和 Warning 级别提示,说明重新计算价格的风险
更改
-
物品发放逻辑统一
ModMailService.SendItemsToPlayer方法新增ModGiveIsFIR配置参数,控制发放物品是否标记为“行动中获取”(FIR)PricePage、QuickEquipmentWidget及聊天机器人命令BuyCmd在发放物品时统一传入_modConfig.Configs.ModGiveIsFIR配置值BuyCmd类中注入ModConfig依赖,确保命令行购买行为与 WebUI 端一致
-
代码清理与重构
- 移除
GroupByExistAndMapBarChart中未使用的硬编码测试数据 - 删除
GroupByExistAndMapBarChart中冗余的_groupByExitsSeries.Clear()调用 - 将部分局部变量声明从显式类型改为
var(如CustomStaticRouter、Home),提升代码简洁性 - 在
SettingPage中提取 Snackbar 消息字符串至变量resultEnd,便于日志复用 - 优化
SettingPage中的金额转换逻辑,显式定义amountLong变量提高代码可读性
- 移除
修复
- 核心逻辑修复
- 修复使用 Suntion 扩展重构后,未正确传入 FIR 状态配置的错误
- 在
CustomStaticRouter的HandleRaidStart和HandleRaidEnd方法中增加空值检查,确保在_injectableClasses为空时仍能通过RaidRecordMod.Logger记录错误
移除
- 移除
GroupByExistAndMapBarChart中遗留的测试代码和冗余调用
病毒检测报告:
RaidRecord-0.6.13.7z
v0.6.12
新增
- 战绩统计模块:新增
StatisticsService服务类,支持按地图、阵营、撤离状态聚合数据的多维分析体系 - 统计页面:新增
StatsPage.razor页面 (/RaidRecord/Stats),集成多种数据可视化组件 - 经济趋势图表:新增
MoneyChart.razor组件,双折线图展示进场价值、装备价值、毛/净利润等经济指标 - 撤离分布图表:新增
GroupByExistAndMapBarChart.razor组件,堆叠柱状图可视化各地图撤离分布 - 阵营分布图表:新增
GroupBySideChart.razor组件,堆叠柱状图展示不同阵营的撤离情况 - 对局效率分析:新增
RaidEfficiencyChart.razor组件,展示赚损比与每分钟净收益率趋势 - 键值对组件:新增
KeyValueCenterWidget.razor组件,简化统计指标展示 - 图表类型切换:在效率图表和金钱图表中增加柱状图/折线图动态切换功能
- SPTExtensions 依赖:新增对
com.suntion.suntioncore.sptextensions(>=0.1.0) 的强制依赖
修改
- 版本升级:项目版本从
0.6.11提升至0.6.12 - 核心架构重构:将账户映射逻辑从
RecordManager迁移至ProfileAndAccountService - 聊天机器人解耦:将 ChatBot 注册逻辑从
ModMailService剥离,新增ChatBotRegisterService专责处理 - 货币交易 API:全局修复
ModMailService.Payment和SendMoney调用方式,显式传入货币类型参数 - 统计页面布局:优化
StatsPage布局结构,移除冗余容器,整合图表显示区域 - 对局详情卡片:在
ArchiveInfoPaperWidget中新增赚损比和每分钟净收益率字段 - 图表视觉规范:统一统计柱状图宽度从
550px调整为850px
优化
- 国际化支持:新增统计界面多语言翻译键,图表标题全面接入
I18NMgr实现动态切换 - 分页控制逻辑:增强
MoneyChart分页逻辑,添加边界按钮禁用状态,优化居中对齐 - 时间格式化:修正
FromTimeSeconds方法,正确计算对局时长而非错误转换为 Unix 时间戳 - 货币单位格式化:将
AddUnitToRub方法从组件迁移至StatisticsService,提升代码复用性 - 数值显示精度:统一赚损比数值显示为三位小数,保持视觉一致性
- 日志可读性:将异常日志中的模糊对象引用替换为具体的
ServerId,便于故障排查
移除
- RecordManager 废弃 API:移除
GetAccount,GetPmcDataByPlayerId,UpdateAccountData方法及AccountIds属性 - 账户映射字典:删除
RecordManager中的_playerId2Account字典和_accountIds集合 - 冗余异常抛出:移除账户加载时的异常抛出逻辑,替换为非阻断式警告日志
病毒检测报告
RaidRecord-0.6.12.7z
v0.6.11
新增
- 新增韩语本地化(主要来自Jungyu Kim)
修复
- issue#2: 修复时区不一致问题: 解决了战斗记录时间、创建时间等在界面上显示为 UTC 时间而非用户本地系统时间的问题
病毒检测报告
RaidRecord-0.6.11.7z
v0.6.10
新增
- 选择存档时, 显示存档占用的磁盘大小(只是本模组的历史记录存档文件)
- 在战绩列表界面允许删除历史战绩
优化
- 优化了部分修饰符权限
已知问题
- 删除存档后,它后面的所有被打开的详细信息的标签名称不会同步修改(在查看信息时确认 | 没有修复计划)
病毒检测报告:
RaidRecord-0.6.10.7z
v0.6.9
新增
- 新增暗色模式, 可以在设置页面修改; WebUI默认风格改为暗色模式, 保护眼睛
- 新增耐久修复功能, 可以在设置界面调整; 会影响快速起装功能的物品价格与买到的装备耐久
- 快速购买装备控件中会显示物品的修正, 以及显示是否开启耐久修复功能的图标与文本
- 快速购买装备控件新增排除指定物品的多选列表, 这种排除方式配合按类型排除的方式可以定制需要的物品;
- 该排除方式不会排除子节点(按类型排除如果父节点的类型被排除, 会排除所有子节点)
- 通过该方式可以单独购买到一些内置插板(能通过快速出售模组卖钱, 但不推荐这样
- 排除多选列表的物品会和上面的物品树同步显示物品排除情况
- 在设置页面新增修复面板, 可以用于修复过去版本计算的毛利润与战损数据
- 在设置页面新增理赔控件, 用来一键获取由于模组损失的卢布, 或者移除意外获取的卢布
- 在设置页面新增检查更新按钮, 按下后会跳转到模组Release页面, 方便查看模组是否有更新
修改
- 战绩列表默认为反序(越近的对局页数越小)
- 战机列表页面工具栏下的按钮改为下拉菜单, 风格与其他表格元素统一(信息按钮, 快速起装按钮也合并到菜单中了)
优化
- PricePage价格页面增加更详细的空值判断
- PricePage价格页面购买物品后重置数目
- 优化了PricePage价格页面购买物品时Upd数据的生成逻辑
- 重构了快速装备购买控件对所有数据结构的管理与使用逻辑
- 优化了战绩列表的默认视图, 优化了工具栏的布局
- 优化了快速装备购买控件中物品是否选中的显示, 这样排除的物品也可以折叠或展开了
修复
- 修复树节点禁用判断逻辑
- 修复了中文WebUI设置界面的文本错误(写的时候手误了)
- 修复了英文WebUI快速购买装备控件中价格显示时未加空格的问题
- 修复了重构前快速购买装备控件中MudAlert的MUD0002警告(该警告要求属性使用小驼峰命名)
- 修复了快速购买装备控件中展开/折叠按钮, 总价值显示, 购买按钮未对齐的问题
- 修复了毛利润与战损计算错误的相关逻辑
病毒检测
RaidRecord-0.6.9.7z
v0.6.8
新增
- I18N中新增获取当前语言的I18NData和WebUILocal的接口, 获取不到会报错
- 快速购买装备控件的树视图支持滚动, 包括List页面和Info页面的
- 快速购买装备控件的树视图支持筛选的种类数量提升, 现在可以按照(武器, 武器配件, 头盔, 护甲, 胸挂, 背包, 装备配件)的类别筛选需要的装备
- 新增RRTreeItemData类, 用于扩充MudBlazor里TreeItemData的数据
更改
- 报错内容将不再多语言化, 只多语言化主要UI, 命令显示的内容和部分服务器日志; WebUI报错可以通过浏览器自动翻译
- 将所有Current缩写为Curr; 将所有Language缩写为Lang
- 将I18N中格式化后的有
{{}}参数的字符串的方法提取出来 - 计算树中不可用的节点时, 将考虑父节点是否被禁用
- 重构了树的计算, 构建算法
- 优化了多语言更改的逻辑
修复
- 修复了物品分类中部分分类过大, 导致意外影响一些子分类的问题
- 修复了快速购买装备控件中抛弃父节点时, 子节点未正确抛弃的问题
- 修复了设置界面切换语言不直观的问题
- 修复了计算装备树时, 在部分父节点已抛弃的情况下, 错误的加上子节点价格的错误
- 修复了切换语言后, 由于部分语言缓存未及时清理, 导致显示文本错误的问题
病毒检测报告
RaidRecord-0.6.8.7z
v0.6.7
新增
- 新增WebUI, 选择存档后即可查看历史战绩列表
- 首页为选择存档页面, 选择后即可在其他页面查看对局记录
- 战绩列表页提供与过去list指令类似的信息, 同时提供按钮用于跳转到查看信息页面
- 增加价格页面, 提供模糊名称搜索, 价格显示与快捷购买功能
- 战绩详情页面显示对局基础信息, 击杀信息, 一键配装块, 物品变化量查询等功能
- 增加设置界面, 允许修改配置文件中的大多数选项
- 新增
DataFormatService处理绝大多数信息的格式化 ModMailService发送物品时允许发送FIR物品, 且会令Item[]内所有物品保持这个状态, 该状态可用参数控制
更改
- 所有邮件发送, 物品发送功能被抽象到
ModMailService中 - 将
DataGetterSystem重命名为DataGetterService并移动到Services命名空间- 并添加一些WebUI需要的数据获取方法
- 将更细的枪械, 头盔, 护甲等类别由DataGetterService以IReadOnlySet形式提供
- 将需要复用的算法移至
AlgorithmService中 - 将 物品名称到物品ID的映射表从
PriceCmd移动到DataGetterService中 - 更新I18N类添加SptLocals属性和GetItemName方法优化本地化处理, 避免其他模块频繁获取SptLocals
修复
- 修复了生产风格显示错误的问题
病毒检测
RaidRecord-0.6.7.7z
备注
本来正着手推进多语言支持、完善 WebUI 样式,并计划加入更多功能。
然而,上一次使用 Rider 的代码清理功能时,体验极其糟糕,彻底打消了我的开发热情。
相关更新内容,暂时搁置。该版本WebUI只支持少量其他语言内容显示
被Rider恶心到的地方
自动检测项目代码样式后,仅提供“接受”或“取消”两个选项,完全不提供任何预览功能,用户无法在应用前确认修改内容自动格式化结果精准踩雷,总能从团队已有的代码风格偏好中,挑出最不受欢迎的格式规则强行应用一旦接受自动检测结果,系统不提供任何重置或撤销选项,修改直接固化,毫无回旋余地不支持对指定文件或特定代码段落进行样式检测与清理,导致格式化后难以定位被改动的具体位置,更无法追溯是哪条规则触发了修改代码清理后仅提供一次撤销机会,若用户不小心保存(如 Ctrl+S),所有“优化”后的糟糕格式立即被写入文件,并与其他未提交更改混杂,几乎无法有效还原或隔离问题变更
是我的疏忽——一直没发现原来可以通过 Alt+Enter 预览并调整格式化结果。
但即便如此,光是把当前这套被错误格式化后的代码清理配置调到可用状态,还不知道要耗费多少时间。