miaomiaodouyin-DSPDouDizhu icon

DSPDouDizhu

模组作者:妙妙在路上 抖音@妙妙在路上 三局斗地主讨伐黑雾(左Alt+P):第1局建筑全清/第2局小兵全灭/第3局中继站全灭,不涨太空威胁度;失败=机甲死亡。联机(Nebula):主机邀请同星球装了本模组的玩家组队打黑雾地主,奖励=清除主机所在星球/星系的黑雾。掀桌=威胁度100%。

Last updated 31 minutes ago
Total downloads 24
Total rating 0 
Categories Cosmetic
Dependency string miaomiaodouyin-DSPDouDizhu-2.3.3
Dependants 0 other packages depend on this package

This mod requires the following mods to function

xiaoye97-BepInEx-5.4.17 icon
xiaoye97-BepInEx

BepInEx5.4.17 mod plugin framework, Mod框架

Preferred version: 5.4.17

README

DSPDouDizhu —— 斗地主讨伐黑雾 🃏⚔️🛰️

模组作者:妙妙在路上 · 抖音@妙妙在路上

一个《戴森球计划》BepInEx 娱乐模组:把"清剿黑雾"变成一场斗地主对局。

English: A Dyson Sphere Program BepInEx mod — settle your war against the Dark Fog over a game of Dou Dizhu (Fight the Landlord). Press LeftAlt+P on any infested planet to play a best-of-three campaign: Round 1 win = all Dark Fog BUILDINGS wiped; Round 2 win = all ground UNITS wiped; Round 3 win = all RELAYS wiped — all with ZERO space threat gain. Lose any round = your Icarus is destroyed (buildings spared). Flip Table in any round = enrage all hives & ground bases to 100% threat (run!).


🎮 玩法说明

  1. 前提:战斗模式存档(有黑雾),且已降落到一个有黑雾的星球(或本星系蜂巢有中继站)。
  2. 按 左Alt+P 打开斗地主牌桌(不暂停游戏——黑雾仍会照常行动,打牌时留意别挨打)。
  3. 三局定胜负(每局都是一整局斗地主,模组会自动从第一个未完成的局开始):
    • 🏭 第 1 局:胜利 = 本星球黑雾建筑全清(基地/激光塔/等离子塔/护盾/连接轨道/复制器);失败 = 机甲死亡
    • 🪖 第 2 局:胜利 = 本星球黑雾小兵全灭;失败 = 机甲死亡
    • 🛰️ 第 3 局:胜利 = 主机玩家所在星系的中继站全灭;失败 = 机甲死亡
    • 三局胜利全程太空威胁度 +0(威胁度快照守卫);任一局失败 → 机甲摧毁(任务失败),玩家建筑保留
    • 胜利一局后点【进入下一局】继续;顶栏显示当前局数与该局赌注
    • 第 2/3 局胜利后自动巡检清剿:先强制激活休眠/列阵中的小兵再补刀,持续巡检直到确认清零(面板会显示"巡检清剿残留中…")
  4. 标准斗地主规则:叫分定庄(1/2/3分)→ 54 张牌 → 地主拿 3 张底牌 → 先出完者胜。
    • 支持牌型:单张 / 对子 / 三张 / 三带一 / 三带二 / 顺子 / 连对 / 飞机(含带单翅、带对翅)/ 四带二单 / 四带二对 / 炸弹 / 王炸
    • 炸弹与王炸使倍数 ×2;春天 / 反春天再 ×2
  5. 与两名 AI(黑雾A / 黑雾B)对局。你的身份(地主/农民)由叫分决定:
    • 你是地主:你先出完 → 胜;任一农民先出完 → 败
    • 你是农民:你或队友先出完 → 胜;地主先出完 → 败

🃏 掀桌(任意一局都可用的同归于尽按钮)

牌桌顶栏中央有一个橙色【掀 桌】按钮,第 1 / 2 / 3 局的叫分与出牌阶段都能点:

掀桌按钮位置

点击后会弹出确认框 【确定掀桌?后果自负!】:

  • 确认【掀了!】→ 当前星球全部地面黑雾基地 + 全部太空黑雾巢穴的威胁度立刻拉满 100%,并进入集结状态
  • 后果:黑雾会以最高强度连续组织进攻波次(地面强袭 + 蜂巢派兵),打得过就打,打不过赶紧跑路
  • 这是玩家主动触发的同归于尽按钮,不受"威胁度守卫"保护——守卫只在胜利清建筑时保证太空威胁度 +0
  • 担心打不过?点【算了】冷静一下,牌还能接着打

🌐 联机模式(Nebula)

安装 Nebula 多人联机模组 与 nebula-NebulaMultiplayerModApi 后,斗地主自动支持联机(单机行为完全不变):

  • 只有主机能开局:主机按 左Alt+P,其他玩家按快捷键会提示"只有主机才能开局"。
  • 自动组队:主机开局时,若当前星球上有其他装了斗地主模组的玩家(≥1 人),随机邀请一名与自己组队——黑雾 AI 为地主,两名玩家为农民搭档;本星球没有其他模组玩家时自动按单机处理。
  • 真实同局:队友的手牌、出牌、提示、进度全部与主机实时同步(主机权威 + 状态广播),两人合作打黑雾地主。
  • 惩罚一致:任一局失败 → 所有参战玩家的机甲同时摧毁(各自客户端本地执行)。
  • 奖励广播:联机胜利奖励经主机执行并广播——第 1 局清全星区建筑、第 2 局灭全星区小兵、第 3 局灭主机所在星系的中继站(实体变更经 Nebula 同步给所有玩家)。
  • 掀桌:联机中由主机按钮触发,全星区威胁度 100%,队友收到通知。
  • 未安装 Nebula / 单人星球时全部逻辑与单机一致,无需任何配置。

⚖️ 赌注(三局制)

局 赌注对象 胜利奖励(走官方击杀路径:爆炸特效、掉落战利品) 失败惩罚
🏭 第 1 局 本星球黑雾建筑(基地/激光塔/等离子塔/护盾/连接轨道/复制器) 建筑全清 · 小兵保留 机甲死亡
🪖 第 2 局 本星球黑雾小兵 小兵全灭 · 建筑已清 机甲死亡
🛰️ 第 3 局 主机玩家所在星系的中继站 中继站全灭 机甲死亡

三局胜利全程 太空威胁度 +0(威胁度快照守卫)。

🔒 太空威胁度保护(核心机制)

模组通过「威胁度快照守卫」保证胜利全灭后:

  • 全体黑雾蜂巢的 EvolveData(太空威胁度 threat / 进化经验 / 等级 / 波次计数)在执行前整结构体快照;
  • 当前星球全部黑雾地面基地的 EvolveData(地面威胁度)同样快照;
  • 全灭执行后立即回写,并在可配置窗口期(默认 25 秒)内每帧回写,压制官方击杀链路(含延迟执行的 ReclaimThreatCarry、ExecuteDeferredEnemyChange 等)可能产生的任何威胁/经验增长;
  • 蜂巢的 relayNeutralizedCounter 一并还原。

结果:黑雾建筑全灭,太空黑雾威胁度 +0,进化等级/经验不涨,不会因此招来更猛烈的全球报复。

♾️ 永久钳制(2.3.1+)

蜂巢的太空威胁度由蜂巢 AI 自身持续自然增长(DecisionAI / AssaultingWavesDetermineAI / LaunchLancerAssault / CreateNativeRelays / SpaceSector.GameTick 等写入),25 秒窗口结束后仍会继续爬升(若已接近满值会很快到 100%)。因此 2.3.1 起守卫升级为两段式:

  1. 窗口期(默认 25 秒):整结构体回写,全部锁定;
  2. 永久钳制:窗口结束后每帧钳制全星区所有蜂巢的 threat 不超过胜利时刻的值——只允许降、不允许升,新出现的巢穴按首次观察值钳制,直到本次游戏结束。

【掀桌】会自动解除钳制(否则 100% 会被压回去),掀桌后的暴涨属于"后果自负"。下一次胜利会重新取基准并恢复钳制。

⌨️ 快捷键与操作

操作 说明
左Alt+P 打开 / 关闭斗地主窗口(仅限附近有黑雾时:星球上有黑雾,或本星系蜂巢有中继站;否则弹出提示)
顶栏【掀桌】 弹出确认【确定掀桌?后果自负!】,确认后当前星球全部地面黑雾基地 + 全部太空黑雾巢穴威胁度立刻拉满 100% 并进入集结报复状态(警告:它们会疯狂进攻)
点击手牌 选牌 / 取消(可多选,亮起表示将打出)
💡 提示 自动选出一手能压住的最小组合(自由出牌时推荐较小组合)
不出 仅在跟牌时可用
出牌 打出选中的牌(牌型不合法或压不上会有提示)
  • 窗口打开期间不暂停游戏;模组已屏蔽点击穿透(Harmony 补丁强制 VFInput.onGUI/onGUIOperate/inputing,并插入全屏透明 UGUI 遮挡板拦截身后 HUD 点击)——点牌不会误触游戏世界与 HUD,WASD/滚轮/ESC 也不会穿透,关闭窗口即恢复。
  • 失败后会显示机甲解体倒计时(默认 5 秒),可点「立即受死」提前执行;到点自动关闭窗口并触发玩家死亡。

⚙️ 配置(BepInEx 配置文件 BepInEx/config/com.deepseekwork.dspdoudizhu.cfg)

配置项 默认 说明
General.AiThinkSeconds 0.9 AI 每步思考延迟(秒,0.1~3)
General.ThreatGuardSeconds 25 胜利后威胁度守卫持续秒数(5~120)
General.DeathCountdownSeconds 5 失败后死亡倒计时(秒,1~15)

📦 安装

方式 A(r2modman / Thunderstore):在管理器中搜索安装 DSPDouDizhu,或手动导入 dist/DSPDouDizhu-<版本>.zip。

方式 B(手动):

  1. 安装 BepInEx 5.4.x;
  2. 将 DSPDouDizhu.dll 放入 BepInEx/plugins/DouDizhuMod/;
  3. 启动游戏。

🔨 从源码构建

powershell -ExecutionPolicy Bypass -File build.ps1            # 编译 + 打包 dist zip
powershell -ExecutionPolicy Bypass -File build.ps1 -Deploy    # 另外部署到游戏 BepInEx\plugins\DouDizhuMod
  • 离线构建:直接引用本机游戏 DSPGAME_Data/Managed 的程序集与 BepInEx 核心,用 .NET SDK 自带 Roslyn csc 编译(-langversion:7.3),无需联网与 NuGet。
  • 斗地主引擎为纯 C#(无 Unity 依赖),位于 src/Engine/,可用 tests/EngineTest 单独自测:dotnet run --project tests/EngineTest -c Release。

🧩 实现说明

  • 地面黑雾识别:遍历 PlanetFactory.enemyPool(EnemyData.id == 索引 过滤有效项),统计与清除只针对当前星球的建筑类实体(跳过 dynamic/unitId>0 的地面小兵);太空蜂巢与航行中的中继站不受影响(掀桌功能除外,见下)。
  • 清除路径:PlanetFactory.KillEnemyFinally(id, ref CombatStat.empty) —— 与游戏内黑雾建筑被激光打爆完全相同的官方链路(爆炸特效、掉落、警告广播、引用清理、遗迹坑位处理)。清除顺序:非基地建筑 → 基地,规避连锁清理干扰。
  • 激活 + 巡检清剿(第 2/3 局):小兵有"列阵/休眠"状态(编成槽里的单位只有激活后才实体化),中继站也可能被蜂巢延迟派出。胜利后先对所有存活基地调用 ActiveAllUnit(gameTick) 强制激活,再按 0.7s/次持续巡检补刀,连续 3 次确认为 0 才结束,杜绝"休眠漏网"。
  • 掀桌:当前星球全部地面基地 + 全部太空蜂巢 EvolveData.threat/threatshr 直接拉满 maxThreat(100%)并触发 UnderAttack() 集结报复;玩家主动触发,不走威胁度守卫。
  • 无击杀者归因:传入空的 CombatStat,不计入机甲战斗统计,避免刷战斗经验。
  • 玩家死亡:Player.Kill() 官方完整流程(机甲爆炸音频、任务失败通知、重生流程);不修改 PlanetFactory,玩家建筑零影响。
  • 黑雾会重建:全灭只清除当前实体。黑雾势力后续仍可能重新扩张/降落新的基地(这是原版机制);届时可再开一局。

⚠️ 注意事项

  • 本模组为娱乐性质:全灭整颗星球黑雾的掉落物较多,注意垃圾清理系统负载。
  • 未针对 Nebula 多人联机测试;联机时请勿使用(状态为单端修改)。
  • 成就系统:模组操作可能使部分战斗相关成就无法在本次对局中正常解锁。

📜 更新日志

2.3.3

  • 联机奖励范围与单机统一:第 1/2 局清主机所在星球的建筑/小兵、第 3 局灭主机所在星系的中继站(不再全星区),联机/单机口径完全一致。

2.3.2

  • 第 3 局范围调整:改为主机玩家所在星系的中继站全灭(单机 = 本地玩家所在星系),不涨太空巢穴威胁度。

2.3.1

  • 修复第 3 局中继站未清除:改用官方同款 sector.enemyPool 扫描(dfRelayId>0)+ 移除兜底,不再依赖蜂巢组件池反查。
  • 第 3 局(最终局)也启用胜利后巡检补刀(此前仅在有下一局时巡检)。
  • 太空威胁度永久钳制:胜利后蜂巢威胁度只降不升(此前仅 25 秒窗口,结束后被蜂巢 AI 自然增长推到 100%);掀桌自动解除钳制。
  • 巡检清剿扩展到第 1 局建筑(联机主机为全星区口径),三局口径一致。

2.3.0

  • 联机模式(Nebula):主机专属开局;自动邀请同星球装有本模组的随机玩家组队(黑雾 AI 地主 + 双人农民搭档,真实同局,状态实时同步)。
  • 联机惩罚同步:任一局失败,所有参战玩家的机甲同时摧毁。
  • 联机奖励升级为全星区执行:第 1 局广播消灭全部黑雾建筑、第 2 局灭全部小兵;第 3 局灭主机所在星系的中继站(实体变更经 Nebula 同步给所有玩家)。
  • 联机中仅主机可开局与掀桌;客机显示同步镜像牌局并可正常出牌/提示/请求下一局。
  • 单机行为完全不变(未装 Nebula 时零影响)。

2.2.0

  • 第 2/3 局胜利后新增激活 + 巡检清剿:强制激活休眠/列阵中的黑雾小兵(ActiveAllUnit),并每 0.7s 巡检补刀,连续 3 次确认为 0 才结束,修复"小兵未全灭"的漏网问题;第 3 局(中继站)同样应用巡检。

2.1.0

  • 三局制玩法:第 1 局胜利=本星球黑雾建筑全清;第 2 局胜利=黑雾小兵全灭;第 3 局胜利=本星系中继站全灭;任一局失败=机甲死亡。
  • 自动从未完成的局继续;顶栏显示局数与各局赌注;第 3 局胜利显示"大获全胜"三局战果清单。
  • 开局门禁放宽:地面无黑雾但本星系蜂巢有中继站时也可开局(直接打第 3 局)。

2.0.x

  • 新增掀桌按钮:地面基地 + 太空巢穴威胁度拉满 100%(后果自负);任意一局可用。
  • 点击穿透屏蔽(VFInput Harmony 补丁 + 全屏透明 UGUI 遮挡板)与崩溃修复。
  • 打开面板不再暂停游戏;快捷键改为左Alt+P;手牌点击判定改为单张牌左半边。
  • 模组图标更换为 J♠ Q♥ K♠ 三张牌。

1.x

  • 初版:单局斗地主,胜利=黑雾建筑单位全灭(威胁度守卫保证太空威胁度 +0),失败=玩家死亡;仿欢乐斗地主界面(绿呢桌面/扑克牌绘制/药丸按钮);纯 C# 斗地主引擎与自测。

📜 许可

MIT