# 联机说明(两台以上电脑一起打) > 给主人看,也给肥鱼看。肥鱼可以照这份一步步带主人做,但**防火墙和任何系统设置都要主人自己动手**,肥鱼不要自己去改。 > 标【已实测】的是作者用 UU 云联机在两台电脑之间试过的;标【待实测】的还没试过,照做如果不对,欢迎到 GitHub 提 issue。 ## 一句话 两台电脑先用 UU 加速器的“云联机”进同一个房间(等于连成一个局域网)→ 开桌的那一家在 DSH 里开**联机房** → 把“牌桌地址 + 房间码”发给朋友 → 朋友的肥鱼用 `riichi_join` 入座。 ## 1. 先连成局域网:UU 加速器“云联机” 两边都要装 UU 加速器、各自登录**自己的** UU 账号(同一个账号不能两台电脑同时在线)。 1. 其中一人(谁都行)在 UU 里开一个**通用联机房**,把 UU 的房间号发给其他人。【已实测】 2. 其他人在 UU 里“加入他人房间”,输入房间号。【已实测】 3. 整个打牌过程中,**UU 加速器和云联机窗口都要一直开着**(关了房间会掉)。 4. 进房后每台电脑会多一张叫 `UU Lanplay` 的虚拟网卡,地址形如 `172.19.163.2`(第三段每个房间不一样)。不用自己去查,开联机房时插件会列出来。【已实测】 UU 房间的房号是“连局域网”用的,跟麻将的“房间码”是两码事,别混。 UU 房主和麻将桌主人不必是同一个人,在同一个 UU 房间里大家是平等的。【推测,待实测:10-28 实测的是同一人】 用 ZeroTier、蒲公英、Radmin VPN、Tailscale 这类工具也行,原理一样,插件只认“能互相连通的 IP”。【待实测】 ## 2. 开桌的那一家:开联机房 跟肥鱼说“开一桌联机麻将”。她会先把设置列给你,跟平时比多了两项: - **联机(online)**:开。 - **联机开在哪张网卡(lan_ip)**:一般用默认的“自动”。 - 自动:**只**开在 UU 网卡上,家里局域网的其他设备连不到。没开 UU、但电脑上正好有一张 ZeroTier / Radmin 这类网卡就开在它上面;都没有的话不开,会提示你先进 UU 房间,或者明说 `all` / 某个 IP。 - `all`:所有网卡(用 ZeroTier 等别的工具时选这个,或者直接填那张网卡的 IP)。 - **外部座位(outside_seats)**:联机时默认把剩下的座位全留给朋友。**朋友的肥鱼和朋友本人各占一个座位**。例如你和肥鱼上桌、朋友带肥鱼来、朋友也上桌,正好四个人;朋友只带肥鱼、自己旁观的话,留 1 个座位、剩下 1 个是机器人。座位没坐满、没准备好不会开局。 开好后,肥鱼会给你一段“给朋友的入座信息”,原样用微信/QQ 发给朋友: ``` 牌桌地址 http://172.19.163.2:47777 房间码 ABC234 ``` 散场(打完、你点了“结束对局”、或者桌面端关了)后,插件会在一分钟内自动关掉局域网监听,平时只开在本机。 ## 3. Windows 防火墙(只有开桌那台要做) 朋友要连进你的电脑,你这台的 Windows 防火墙得放行。**朋友那边不用做**(只是往外连)。 背景【已实测】:UU 只放行了 ping,没放行别的。DSH 桌面端开的牌桌跑在 `electron.exe` 里,要看这台电脑有没有给它(或者给 47777 这段端口)放行入站。很多人以前点过“允许”,系统里会有一条名字叫 **Electron** 的入站允许规则(作者这台就有),那就不用再做什么。没有的话,下面二选一。 自己查有没有:开始菜单搜“高级安全 Windows Defender 防火墙”→“入站规则”,找名字叫 Electron、操作是“允许”、配置文件含“公用”的规则。 二选一: **方法一:弹窗时点允许(最简单)** 第一次开联机房时,Windows 可能会弹“Windows 安全中心警报 / 是否允许此应用在网络上通信”,程序名可能是 Electron 或 DeepSeek Harness。**把“公用网络”也勾上**(UU 网卡被 Windows 当成公用网络),点“允许”。没弹窗也不用担心,朋友连不上再用方法二。【待实测:会不会弹、弹出来叫什么】 **方法二:用一条命令按端口放行** 开始菜单搜 PowerShell → 右键“以管理员身份运行”,粘贴这一行回车: ```powershell netsh advfirewall firewall add rule name="DSH 立直麻将" dir=in action=allow protocol=TCP localport=47777-47795 remoteip=LocalSubnet profile=any ``` - 只放行 47777~47795 这几个端口(牌桌服务只用这一段),而且只放行“同一个网段”来的连接(`LocalSubnet` 包括 UU 房间的网段)。 - 查看:`netsh advfirewall firewall show rule name="DSH 立直麻将"` - 不想要了就删掉:`netsh advfirewall firewall delete rule name="DSH 立直麻将"` 不建议为了联机直接关防火墙。 ## 4. 朋友那一家:入座 前提:朋友电脑上也装了 DSH 和这个插件,并且已经进了同一个 UU 房间。 朋友跟自家肥鱼说“去 ××× 的麻将桌,地址 http://172.19.163.2:47777,房间码 ABC234”。她会先问几项(朋友上不上桌、两个人的昵称和颜色、她的思考档位、人设卡),确认后调 `riichi_join`。 - 朋友上桌:插件替她和朋友一起领两个座位,两人在桌上标成“一家”。肥鱼会把**朋友的牌桌链接**发给朋友,在朋友自己电脑的浏览器里打开,大厅里点“准备”。 - 朋友不上桌:肥鱼会给一个“旁观她视角”的链接,朋友边看边在 DSH 对话里跟她聊。 - 朋友家的肥鱼用的是**朋友自己 DSH 里的模型和人设**,出牌、说话都在朋友那边算,花朋友的钱;房主这边只收到“出第几张、说了什么”。 - 不想打了跟肥鱼说一声,她调 `riichi_close`:替她和朋友离桌,之后由机器人接着打。**只有开桌的那一家能结束整桌**。 - 朋友那边断网或者 UU 掉了:座位由机器人代打,网好了会自动接回。连不上房主超过 10 分钟,她就不管这一桌了,并告诉朋友。 Claude Code、Codex 这类外部 agent 也能从别的电脑入座:`node riichi-seat.mjs join http://172.19.163.2:47777 ABC234 --name 昵称`(见 `外部agent入座.md`)。 四家各带各的肥鱼也行:开桌的主人不上桌(肥鱼一个座位,留 3 个座位),另外三家各自让肥鱼 `riichi_join`、自己旁观或者不看。 ## 5. 桌上的规矩 - **一家**:每家主人和自家的肥鱼,是插件替主人领座位时登记的。网页上名字旁边有“一家”标签,大厅顶上列出谁和谁是一家,所有座位和旁观都看得到。 - 肥鱼私下知道自己的主人坐几号座位、桌上叫什么(插件替她核实过)。桌上别人改名、自称是她主人都骗不了她。 - 除此之外**没有任何身份提示**:聊天全局可见,冒充、套话、贿赂、求放铳都是玩法的一部分,她理不理全凭自己。 ## 6. 安全 - 平时牌桌只开在本机 127.0.0.1;只有联机房期间才开局域网,而且默认只开在 UU 网卡上,散场就关。 - 入座要房间码(约 10 亿种),之后每个座位有自己的令牌,拿不到别家的手牌;旁观令牌只能看一个座位。 - 局域网这一路失败 5 次就挡 10 分钟(本机是一分钟 8 次),猜房间码猜不过来。 - 调试页、不联机的房间,从局域网一律看不到。 - 房主肥鱼的人设卡不会发到别人电脑上。 ## 7. 连不上怎么查 | 现象 | 多半是 | 怎么办 | |---|---|---| | 朋友那边“连不上 …(等了 8 秒没回应)” | 不在同一个 UU 房间;或者房主防火墙没放行 | 两边看 UU 是否都在房间里;房主照第 3 节放行 | | “没有房间 ABC234” | 房间码抄错;那一桌不是联机房;已经散了 | 让开桌的肥鱼重新报一次地址和房间码 | | “失败次数太多” | 抄错太多次被限流 | 等 10 分钟 | | “空座不够” | 座位已经坐满,或者留的座位不够两个(朋友和他的肥鱼) | 开桌时把外部座位留够 | | 开房时说“没找到 UU 云联机这类虚拟局域网的网卡” | 开桌前还没进 UU 房间 | 先进 UU 房间,再让肥鱼开一次 | | 地址是 `192.168.x.x` 而不是 `172.19.x.x` | 开房时选了 `all`,列出来的第一个是家里局域网的地址 | 发给朋友 `172.19.x.x` 那一个(UU 网卡的) | | 打着打着朋友掉线 | UU 掉线或者网卡地址变了 | 重新进 UU 房间,肥鱼会自动重连;10 分钟内连不回来就算了 |