Skip to content

Releases: SunYanbox/RaidRecord

v0.7.2

13 Apr 19:28
9072c60

Choose a tag to compare

完善测试架构并增强路径安全校验机制

  • 新增功能: 构建单元测试框架与 CI 环境
    • 初始化 RaidRecord.Tests 项目,配置 TargetFramework 为 net9.0 并引入 MSTest 依赖
    • 在 RaidRecord.sln 中注册新测试项目 GUID 及构建规则
    • 将 CI Runner 从 Ubuntu 切换至 Windows 以解决跨平台测试兼容性问题
  • 修复问题: 强化文件路径访问控制逻辑
    • 实现 IsSubFilePath 静态方法,利用 Path.GetFullPath 规范化路径并阻止非授权目录访问
    • 修正父目录分隔符处理逻辑,确保 normalizedParent 变量正确结尾以避免相对路径解析异常
    • 增加 parentDirsubFilePath 参数的空值及空白字符串校验,防止异常抛出
    • 修复构建脚本中缺失的 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

02 Apr 10:10

Choose a tag to compare

[新增功能]

  • 价格计算模式配置:引入可配置的基础价格计算策略,支持三种模式
    • Handbook:使用手册价格
    • AvgRagfair:使用跳蚤市场平均价格
    • Auto:自动选择最优价格来源
  • Web界面配置:新增价格计算方式下拉选择组件,支持三种模式的图形化配置
  • 多语言支持:为价格模式配置添加中、英、韩文界面文本

[重构优化]

  • 简化价格系统:重写价格获取逻辑,移除冗余的依赖注入(PaymentHelper、HandbookHelper、DatabaseService、RagfairOfferService),替换为统一的RagfairController
  • 清理遗留代码:删除复杂的跳蚤报价遍历逻辑及私有方法GetAveragePriceFromOffers

[变更]

  • 默认配置调整:价格计算模式默认值为AvgRagfair

病毒检测报告:RaidRecord-0.7.1.7z

v0.7.0

10 Mar 08:52

Choose a tag to compare

新增功能

  • 战绩收藏系统
    • 支持将重要战绩添加至收藏夹,防止误删
    • 新增收藏状态视觉标识(绿色标记)
    • 增加“只显示收藏”筛选开关,便于快速定位重要记录
    • 收藏状态自动持久化存储

优化与改进

  • 数据模型优化

    • RaidArchive 新增 MapId 属性,采用惰性填充策略提升性能
    • 移除过时的状态流转逻辑,简化数据结构
    • 优化旧数据兼容性处理
  • 价值计算规则调整

    • 移除对 Scabbard(刀鞘)的价值归零限制,允许正常计价, 解决“零元购”刀具的问题
    • 从战备价值中显式排除刀具 (BaseClasses.KNIFE) 与安全箱物品

移除项

  • 移除 RaidInfoRaidArchive 中未使用的 State 属性
  • 删除 EFTCombatRecord.ArchivedRecords 计算属性及相关状态流转逻辑

病毒检测报告:
RaidRecord-0.7.0.7z

v0.6.13

06 Mar 06:32

Choose a tag to compare

新增

  • 国际化支持

    • 为统计页面导航链接添加多语言支持 (webUI.navStatsPage),现已支持中文、英文、韩文显示
    • 为设置页面的“修复存档”按钮添加 MudTooltip 提示,详细说明该功能的使用场景与注意事项(webUI.fixArchiveDesc
  • 日志系统增强

    • RaidRecordMod 新增静态 Logger 属性 (ModLogger),便于各组件统一日志输出
    • 为多个页面和组件添加关键流程的 Debug/Info 级别日志记录:
      • Home - 账号初始化流程
      • RecordsList - 删除记录操作
      • PricePageQuickEquipmentWidget - 购买物资的详细参数
      • ClaimCompensationWidget - 理赔操作(记录账户ID、金额、成功/失败状态)
    • ProfileInfoWidgetSptInfoMudCardBotProfileInfoCard 等组件的生命周期方法中增加对 SptProfile 为空的 Warn 级别日志
  • 异常处理优化

    • 图表组件 (GroupByExistAndMapBarChartGroupBySideChart) 在数据为空时调用 logger.Error 并传入 ArgumentNullException,提供完整堆栈信息
    • PricePageQuickEquipmentWidget 的购买逻辑中使用 try-catch 包裹 JsonUtil.Serialize 调用,防止序列化失败导致主流程中断
  • 功能优化

    • ModConfig 类中暴露 SptLogger 属性,便于 Razor 页面直接访问 SPT 原生日志接口
    • SettingPage.FixAllArchive 方法增加 Debug 日志和 Warning 级别提示,说明重新计算价格的风险

更改

  • 物品发放逻辑统一

    • ModMailService.SendItemsToPlayer 方法新增 ModGiveIsFIR 配置参数,控制发放物品是否标记为“行动中获取”(FIR)
    • PricePageQuickEquipmentWidget 及聊天机器人命令 BuyCmd 在发放物品时统一传入 _modConfig.Configs.ModGiveIsFIR 配置值
    • BuyCmd 类中注入 ModConfig 依赖,确保命令行购买行为与 WebUI 端一致
  • 代码清理与重构

    • 移除 GroupByExistAndMapBarChart 中未使用的硬编码测试数据
    • 删除 GroupByExistAndMapBarChart 中冗余的 _groupByExitsSeries.Clear() 调用
    • 将部分局部变量声明从显式类型改为 var(如 CustomStaticRouterHome),提升代码简洁性
    • SettingPage 中提取 Snackbar 消息字符串至变量 resultEnd,便于日志复用
    • 优化 SettingPage 中的金额转换逻辑,显式定义 amountLong 变量提高代码可读性

修复

  • 核心逻辑修复
    • 修复使用 Suntion 扩展重构后,未正确传入 FIR 状态配置的错误
    • CustomStaticRouterHandleRaidStartHandleRaidEnd 方法中增加空值检查,确保在 _injectableClasses 为空时仍能通过 RaidRecordMod.Logger 记录错误

移除

  • 移除 GroupByExistAndMapBarChart 中遗留的测试代码和冗余调用

病毒检测报告:
RaidRecord-0.6.13.7z

v0.6.12

28 Feb 12:03

Choose a tag to compare

新增

  • 战绩统计模块:新增 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.PaymentSendMoney 调用方式,显式传入货币类型参数
  • 统计页面布局:优化 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

23 Feb 04:53

Choose a tag to compare

新增

修复

  • issue#2: 修复时区不一致问题: 解决了战斗记录时间、创建时间等在界面上显示为 UTC 时间而非用户本地系统时间的问题

病毒检测报告
RaidRecord-0.6.11.7z

v0.6.10

19 Feb 12:59

Choose a tag to compare

新增

  • 选择存档时, 显示存档占用的磁盘大小(只是本模组的历史记录存档文件)
  • 在战绩列表界面允许删除历史战绩

优化

  • 优化了部分修饰符权限

已知问题

  • 删除存档后,它后面的所有被打开的详细信息的标签名称不会同步修改(在查看信息时确认 | 没有修复计划)

病毒检测报告:
RaidRecord-0.6.10.7z

v0.6.9

08 Jan 17:44

Choose a tag to compare

新增

  • 新增暗色模式, 可以在设置页面修改; WebUI默认风格改为暗色模式, 保护眼睛
  • 新增耐久修复功能, 可以在设置界面调整; 会影响快速起装功能的物品价格与买到的装备耐久
  • 快速购买装备控件中会显示物品的修正, 以及显示是否开启耐久修复功能的图标与文本
  • 快速购买装备控件新增排除指定物品的多选列表, 这种排除方式配合按类型排除的方式可以定制需要的物品;
    • 该排除方式不会排除子节点(按类型排除如果父节点的类型被排除, 会排除所有子节点)
    • 通过该方式可以单独购买到一些内置插板(能通过快速出售模组卖钱, 但不推荐这样
    • 排除多选列表的物品会和上面的物品树同步显示物品排除情况
  • 在设置页面新增修复面板, 可以用于修复过去版本计算的毛利润与战损数据
  • 在设置页面新增理赔控件, 用来一键获取由于模组损失的卢布, 或者移除意外获取的卢布
  • 在设置页面新增检查更新按钮, 按下后会跳转到模组Release页面, 方便查看模组是否有更新

修改

  • 战绩列表默认为反序(越近的对局页数越小)
  • 战机列表页面工具栏下的按钮改为下拉菜单, 风格与其他表格元素统一(信息按钮, 快速起装按钮也合并到菜单中了)

优化

  • PricePage价格页面增加更详细的空值判断
  • PricePage价格页面购买物品后重置数目
  • 优化了PricePage价格页面购买物品时Upd数据的生成逻辑
  • 重构了快速装备购买控件对所有数据结构的管理与使用逻辑
  • 优化了战绩列表的默认视图, 优化了工具栏的布局
  • 优化了快速装备购买控件中物品是否选中的显示, 这样排除的物品也可以折叠或展开了

修复

  • 修复树节点禁用判断逻辑
  • 修复了中文WebUI设置界面的文本错误(写的时候手误了)
  • 修复了英文WebUI快速购买装备控件中价格显示时未加空格的问题
  • 修复了重构前快速购买装备控件中MudAlert的MUD0002警告(该警告要求属性使用小驼峰命名)
  • 修复了快速购买装备控件中展开/折叠按钮, 总价值显示, 购买按钮未对齐的问题
  • 修复了毛利润与战损计算错误的相关逻辑

病毒检测
RaidRecord-0.6.9.7z

v0.6.8

30 Dec 14:02

Choose a tag to compare

新增

  • I18N中新增获取当前语言的I18NData和WebUILocal的接口, 获取不到会报错
  • 快速购买装备控件的树视图支持滚动, 包括List页面和Info页面的
  • 快速购买装备控件的树视图支持筛选的种类数量提升, 现在可以按照(武器, 武器配件, 头盔, 护甲, 胸挂, 背包, 装备配件)的类别筛选需要的装备
  • 新增RRTreeItemData类, 用于扩充MudBlazor里TreeItemData的数据

更改

  • 报错内容将不再多语言化, 只多语言化主要UI, 命令显示的内容和部分服务器日志; WebUI报错可以通过浏览器自动翻译
  • 将所有Current缩写为Curr; 将所有Language缩写为Lang
  • 将I18N中格式化后的有{{}}参数的字符串的方法提取出来
  • 计算树中不可用的节点时, 将考虑父节点是否被禁用
  • 重构了树的计算, 构建算法
  • 优化了多语言更改的逻辑

修复

  • 修复了物品分类中部分分类过大, 导致意外影响一些子分类的问题
  • 修复了快速购买装备控件中抛弃父节点时, 子节点未正确抛弃的问题
  • 修复了设置界面切换语言不直观的问题
  • 修复了计算装备树时, 在部分父节点已抛弃的情况下, 错误的加上子节点价格的错误
  • 修复了切换语言后, 由于部分语言缓存未及时清理, 导致显示文本错误的问题

病毒检测报告
RaidRecord-0.6.8.7z

v0.6.7

29 Dec 10:56

Choose a tag to compare

新增

  • 新增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 预览并调整格式化结果。
但即便如此,光是把当前这套被错误格式化后的代码清理配置调到可用状态,还不知道要耗费多少时间。