Skip to content

GFAM v1.2

Choose a tag to compare

@HiLodve HiLodve released this 19 Jun 15:09
· 2 commits to main since this release

GFAM v1.2

本版本在 v1.1 的基础上新增完整的 GUI 图形化启动器、跟随模块自动制造系统、跨进程协调机制,并对 A-10、EPA、灰域等多个模块进行了大幅优化。

新增功能

GUI 图形化启动器(全新)

新增 tools/gfam_gui_launcher.py,提供基于 Tkinter 的完整图形界面,替代原有命令行菜单操作。通过 PyInstaller 打包为单文件 exe,用户下载解压即可运行。

界面分为两个阶段:

  1. 启动与服务器选择窗口:选择服务器后自动启动 GFAM 后端进程。
  2. 主控面板:包含所有功能模块的快捷按钮、实时彩色日志输出、各模块独立设置弹窗。

支持的模块按钮:EPA 打捞、13-4、A-10 资源、训练资料/自动训练、零元购 f2p、零元购 PR、一键打捞 Smart、跟随制造、灰域彩蛋。

其他特性:

  • 自动检测 Node.js / Python 运行环境,缺失时弹窗提示并支持 winget 一键安装。
  • 自动发送服务器名称,无需手动输入。
  • 各模块运行结束后自动弹出统计摘要窗口(详见下方"运行统计摘要弹窗")。
  • 主窗口与模块窗口支持彩色日志渲染(ANSI SGR 颜色映射),可开关。
  • 精简日志模式:剥离 ANSI 清屏/光标控制码,单行摘要显示 EPA 批量发送。

跟随模块制造系统(全新)

新增后台制造守护进程,可在运行打捞/资源等主模块的同时自动执行制造任务。

核心文件:

  • gfam_factory_auto.py:人形/装备自动制造后台循环。支持 Gun/developMultiGun、Equip/developMulti、finishAllDevelop、批量拆解非保护产物。
  • gfam_factory_config.py:制造设置(公式、保护规则、目标命中保留)与快速制造功能。GUI 中通过独立的"制造"模块按钮进入设置弹窗。

功能要点:

  • 人形制造与装备制造可独立配置公式和保护规则。
  • 目标命中保留:制造产物命中目标列表时自动保留,不进入拆解队列。
  • 非保护产物自动批量拆解。
  • 仓库空位智能管理:至少保留 1 个空位给其他模块使用,避免仓库满导致关卡无法开始。
  • 与 A-10 资源模块通过跨进程拆解锁协调仓库操作,防止同时拆解冲突。
  • 快速建造功能支持独立选择本次公式与保护规则,不套用跟随制造的持久配置。

跨进程协调机制(全新)

GFAM 支持多个模块作为独立 OS 进程同时运行(如 A-10 + 跟随制造),为避免并发冲突新增以下机制:

跨进程拆解锁 (gfam_crossprocess_lock.py):

  • 基于原子文件创建(O_CREAT | O_EXCL)实现。
  • 序列化 Gun/retireGun 和 Equip/retire 请求,防止 A-10 和制造模块同时提交拆解。
  • 支持陈旧锁自动回收(进程崩溃后不会永久阻塞其他进程)。

全局 API 锁 (gfam_api_lock.py):

  • 序列化所有 GFL 服务器 API 请求。
  • 通过 patch_gfl_client() 在模块导入时自动接入,无需修改业务代码。
  • 避免多进程并发请求导致服务器异常或账号风控。

Index/index 统一缓存 (gfam_index_cache.py):

  • 线程安全的 TTL 缓存管理器,支持进程内复用和跨进程共享缓存文件(.gfam_index_cache.json)。
  • 大幅减少冗余的 Index/index 请求。
  • 支持 get()(TTL 内复用)、get(force=True)(强制刷新)、bypass()(不走缓存直接请求)。
  • 已接入模块:epa_plus、13-4、f2p、f2p_pr、smart_epa、pick_and_train、a10_resource、gfam_auth_capture。

EPA 设置文件驱动

新增 apply_epa_settings_from_file() 函数。EPA、13-4、Smart EPA 模块启动时自动从 .gfam_epa_settings.json 加载 GUI 设置面板中配置的参数(模式、关卡、目标、停机条件、编队数量等),无需手动输入命令行参数。

GUI 中的"EPA 设置"按钮会统一收集所有选项并写入该文件,后端启动时自动读取并应用。

运行统计摘要弹窗

所有主要模块运行结束后生成 JSON 摘要文件,GUI 自动检测并弹出统计窗口:

  • EPA → .gfam_epa_summary.json
  • 13-4 → .gfam_13_4_summary.json
  • A-10 → .gfam_a10_summary.json
  • 零元购 → .gfam_f2p_summary.json
  • 零元购 PR → .gfam_f2p_pr_summary.json
  • 灰域 → .gfam_greyzone_summary.json

摘要内容包括:运行时长、出击次数、掉落统计、资源变化、妖精状态。如果跟随制造功能处于开启状态,还会附带制造统计(人形/装备的制造次数、完成次数、目标命中数、总产出)。

优化与修复

A-10 四项资源

  • 拆解逻辑大幅重构:支持分块提交(默认 80 个/批,可通过 GFAM_A10_RETIRE_BATCH_SIZE 配置),避免大批量请求超时。
  • 新增 4 级拆解触发条件:待拆人形达到固定阈值(默认 10 个)→ 仓库空位预警(剩余 ≤ 5)→ 仓库空位紧张(剩余 ≤ 2)→ 仓库完全耗尽兜底。
  • A-10 出击失败后若有待拆人形且仓库已满,自动执行紧急拆解恢复空位,不再直接中断。
  • 定期同步跟随制造模块的仓库缓存(每 300 次出击),保持空位计数准确。
  • 拆解响应状态未知(plaintext response / timeout 等)时保留待拆 UID 队列,不再丢弃,后续轮次自动重试。
  • HTTP 超时延长至 30 秒(GFAM_A10_RETIRE_TIMEOUT),适配官方服务器大批量拆解的响应延迟。
  • 运行结束后生成 JSON 摘要文件,包含四项资源变化和拆解统计。

EPA 打捞

  • build_team_configs_from_index() 新增 require_fairy 参数。single 模式允许无妖精梯队编入,不再因梯队 1 没有妖精而被过滤掉。
  • single 模式修复:显式查找 team_id == 1 的梯队,不再错误使用梯队 2(此前当梯队 1 没有妖精时 teams[0] 可能指向梯队 2)。
  • single 模式缺少人形时输出详细错误提示,包括当前有效梯队列表。
  • 运行结束后生成 JSON 摘要文件,包含打捞统计和跟随制造数据。

灰域彩蛋

  • Index/index 请求新增 5 次重试机制(间隔 5 秒),提高网络波动下的启动成功率。
  • 票券类型统一由 current_ticket_type() 函数管理,消除散布在各处的硬编码读取。
  • 运行结束后生成 JSON 摘要文件。

零元购 / 零元购 PR

  • 接入 IndexCacheManager,减少冗余 Index/index 请求。
  • 运行结束后生成 JSON 摘要文件,包含运行统计和跟随制造数据。
  • 妖精统计改为按需导入,降低模块间耦合。

一键打捞 Smart EPA

  • 新增 apply_epa_settings_from_file() 支持,可从 GUI 设置面板加载配置。
  • 接入 IndexCacheManager。

训练资料 / 自动训练

  • 接入 IndexCacheManager,支持 TTL 缓存和 bypass 模式。
  • 代理(proxy)停止和 Windows 代理恢复增加 try-except 保护。

代理(proxy.py)

  • 新增 atexit 清理钩子:进程退出时自动关闭 Windows 系统代理,防止异常退出后代理残留导致网络不可用。
  • 新增客户端信号量(最大 50 并发),防止高并发场景下线程数爆炸。

环境安装(setup_windows.ps1)

  • Python 命令检测统一为 Get-PythonCmd() 函数,优先检测 python 再检测 py。
  • requests 依赖安装失败不再阻断安装流程。GFAM 主要依赖内置 gflzirc 库进行通信,requests 仅用于少数非核心场景。所有失败路径改为黄色警告提示。
  • winget 安装 Python 失败后给出友好提示而非直接退出。
  • 新增 Ensure-PythonRequirements() 函数,统一管理依赖检查与安装。

auth_capture

  • 新增 PID 文件写入(.gfam_auth_capture.pid),供 GUI 关闭时追踪并终止 auth_capture 子进程树。
  • 游戏登录过程中如果返回 Index/index,会顺带缓存到 .gfam_index_cache.json,后续模块可直接复用,无需重复请求。
  • 代理启动/停止增加 try-except 保护,避免清理阶段异常导致崩溃。

妖精自动(fairy_auto)

  • 接入全局 API 锁,与其他模块协调避免并发请求。

注意事项

  • GUI 版本通过 PyInstaller 打包,首次启动可能较慢(需要解压运行时环境),后续启动正常。
  • 跟随制造系统与 A-10 同时运行时,两者通过跨进程锁协调仓库拆解操作。如果遇到拆解响应异常,可检查 .gfam_factory_warehouse_cache.json 确认仓库空位状态。
  • 如果 A-10 出现 Unexpected plaintext response 或大批量拆解超时,可尝试调低参数:
    • GFAM_A10_RETIRE_BATCH_SIZE=40(默认 80)
    • GFAM_A10_PENDING_RETIRE_LIMIT=20(默认 10)
    • GFAM_A10_RETIRE_TIMEOUT=60(默认 30)
  • EPA single 模式要求梯队 1 必须编入至少 1 名人形(不要求妖精)。team 模式仍要求梯队有妖精。
  • 运行统计摘要弹窗依赖各模块生成的 .gfam_*_summary.json 文件,如果模块异常中断可能不会生成。

新增文件

文件 说明
tools/gfam_gui_launcher.py GUI 图形化启动器(4015 行)
tools/build_gfam_gui_exe.py PyInstaller 打包脚本
tools/build_portable_package.py 便携包打包脚本
tools/start_gfam_background.ps1 后台启动 GFAM 脚本
modules/gfam_factory_auto.py 跟随模块制造后台循环
modules/gfam_factory_config.py 制造设置与快速制造
modules/gfam_crossprocess_lock.py 跨进程文件锁(拆解序列化)
modules/gfam_api_lock.py 全局 API 跨进程锁
modules/gfam_index_cache.py Index/index 统一缓存管理器
data/equip.json 装备数据字典
requirements.txt Python 依赖声明
build_gfam_gui_exe.bat 一键编译 GUI exe
GFAM-GUI.spec PyInstaller spec 文件