silksong-coop-mod 0.4.23 → 0.4.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL.bat +16 -16
- package/INSTALL.txt +258 -258
- package/README.md +17 -17
- package/SSMP/SSMP.dll +0 -0
- package/UPDATE.bat +14 -14
- package/install.ps1 +250 -250
- package/package.json +30 -30
- package/update.ps1 +281 -281
package/INSTALL.bat
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
@echo off
|
|
2
|
-
chcp 65001 >nul 2>&1
|
|
3
|
-
title Silksong co-op (SSMP) installer
|
|
4
|
-
|
|
5
|
-
rem Runs the real installer next to this file. -ExecutionPolicy Bypass applies to this one run only and changes
|
|
6
|
-
rem nothing on the machine. pwsh is preferred when present, because it handles text encoding better.
|
|
7
|
-
|
|
8
|
-
where pwsh >nul 2>&1
|
|
9
|
-
if %errorlevel%==0 (
|
|
10
|
-
pwsh -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1"
|
|
11
|
-
) else (
|
|
12
|
-
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1"
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
echo.
|
|
16
|
-
pause
|
|
1
|
+
@echo off
|
|
2
|
+
chcp 65001 >nul 2>&1
|
|
3
|
+
title Silksong co-op (SSMP) installer
|
|
4
|
+
|
|
5
|
+
rem Runs the real installer next to this file. -ExecutionPolicy Bypass applies to this one run only and changes
|
|
6
|
+
rem nothing on the machine. pwsh is preferred when present, because it handles text encoding better.
|
|
7
|
+
|
|
8
|
+
where pwsh >nul 2>&1
|
|
9
|
+
if %errorlevel%==0 (
|
|
10
|
+
pwsh -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1"
|
|
11
|
+
) else (
|
|
12
|
+
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0install.ps1"
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
echo.
|
|
16
|
+
pause
|
package/INSTALL.txt
CHANGED
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
丝之歌联机模组(SSMP 自制版)——一键安装
|
|
2
|
-
==========================================
|
|
3
|
-
|
|
4
|
-
这是 SSMP 联机模组的一个自制版本,比公开版多了「双人存档」:
|
|
5
|
-
两个人共用一条流程,任务、世界变化、剧情道具会互相同步。
|
|
6
|
-
|
|
7
|
-
重要:两个人必须装【同一份】这个压缩包,不能一个人用公开版。
|
|
8
|
-
|
|
9
|
-
【从这一版开始,版本不一致会被直接拦住。】
|
|
10
|
-
加入房间时会比对双方的版本,不一样就不让连,并且明确告诉你
|
|
11
|
-
「你们装的版本不同」,而不是连上之后表现出一堆对不上的怪事。
|
|
12
|
-
|
|
13
|
-
※ 代价是:这一版【不认识任何旧版本】。
|
|
14
|
-
所以【两个人必须一起换成这一版】,只有一个人装的话,
|
|
15
|
-
你们会连不上——这是正常的,不是坏了。
|
|
16
|
-
这笔账只付一次,以后就不会再有「一个人更了一个人没更」还不知情的情况。
|
|
17
|
-
|
|
18
|
-
(顺带更正我之前在这里写错的话:我原先说「版本不一致配对时会提示」,
|
|
19
|
-
那时候是【不对的】,当时根本没有任何东西在比对版本。现在才是真的。)
|
|
20
|
-
|
|
21
|
-
【这个包是完全离线的】模组加载器已经放在包里,
|
|
22
|
-
安装过程不需要联网,不用梯子,也不受任何网站能不能打开的影响。
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
一、怎么装(双击一下就行)
|
|
26
|
-
--------------------------
|
|
27
|
-
|
|
28
|
-
1. 把这个压缩包【完整解压】到任意位置(比如桌面)。
|
|
29
|
-
不要只解压出单个文件,INSTALL.bat、SSMP 文件夹和
|
|
30
|
-
BepInEx_win_x64_5.4.23.4.zip 必须在一起。
|
|
31
|
-
|
|
32
|
-
2. 双击 INSTALL.bat。
|
|
33
|
-
|
|
34
|
-
3. 等它跑完,看到绿色的 Done 就好了。
|
|
35
|
-
|
|
36
|
-
它会自己做这几件事:
|
|
37
|
-
- 找到你的 Silksong 安装位置(找不到会让你把路径粘进去)
|
|
38
|
-
- 先把你的存档备份成 zip,放在这个文件夹里的 save-backups\ 下
|
|
39
|
-
(只留最近 3 份,更旧的会自动删掉;它不会碰别的文件)
|
|
40
|
-
- 用包里自带的加载器装好(不联网)
|
|
41
|
-
- 把联机插件放进去
|
|
42
|
-
- 最后检查一遍有没有装成功
|
|
43
|
-
|
|
44
|
-
窗口里的提示是英文的,因为 Windows 自带的 PowerShell 显示中文
|
|
45
|
-
经常是乱码,英文反而不会出错。
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
二、这个脚本安全吗
|
|
49
|
-
------------------
|
|
50
|
-
|
|
51
|
-
- 它只往【游戏目录】写东西,外加一个存档备份。
|
|
52
|
-
不改注册表、不改系统设置、不装任何后台程序、不联网。
|
|
53
|
-
- 不需要管理员权限(除非你的游戏装在 C:\Program Files 里)。
|
|
54
|
-
- 想卸载:把游戏目录里的 BepInEx 文件夹、winhttp.dll、
|
|
55
|
-
doorstop_config.ini、.doorstop_version、changelog.txt
|
|
56
|
-
删掉就完全干净了。
|
|
57
|
-
|
|
58
|
-
包里那个 BepInEx_win_x64_5.4.23.4.zip 是 BepInEx 官方在 GitHub
|
|
59
|
-
上发布的原版文件,没有改动过,大小 638,940 字节。
|
|
60
|
-
|
|
61
|
-
有一点要提前说:BepInEx 这类模组加载器的工作方式,是在游戏
|
|
62
|
-
exe 旁边放一个 dll,让游戏启动时连带加载它。这是所有同类
|
|
63
|
-
加载器的通用做法,但这个手法和某些恶意软件相同,所以
|
|
64
|
-
【杀毒软件有时会报毒】。看到告警是这个原因,不是脚本在干别的。
|
|
65
|
-
|
|
66
|
-
真正的风险不在系统,在存档:模组有可能弄坏存档,
|
|
67
|
-
所以脚本会先备份。
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
三、怎么一起玩
|
|
71
|
-
--------------
|
|
72
|
-
|
|
73
|
-
1. 【从 Steam 启动游戏】,不要直接双击 exe。
|
|
74
|
-
|
|
75
|
-
2. 一个人开房:选 "Steam" 那一页,点 Create Lobby。
|
|
76
|
-
开完房不会直接进游戏,而是停在一个【等待室】里。
|
|
77
|
-
|
|
78
|
-
3. 房主在等待室里点 INVITE FRIEND,会直接弹出 Steam 的邀请框,
|
|
79
|
-
不用自己去找 Steam 覆盖层。对方接受邀请就会进到同一个等待室。
|
|
80
|
-
|
|
81
|
-
4. 两个人各自点一次 I'M READY。
|
|
82
|
-
名单上能看到对方是 READY 还是 NOT READY。
|
|
83
|
-
【两个人都 READY 之后】,两边才会同时打开各自的选存档界面。
|
|
84
|
-
反悔就再点一次取消。
|
|
85
|
-
|
|
86
|
-
5. 进游戏后,屏幕上方会出现一行字,
|
|
87
|
-
写着「按 L 和 XXX 组成双人存档」。
|
|
88
|
-
两个人都按一下 L 就配对好了。
|
|
89
|
-
不想配对就别理它,它会自己消失。
|
|
90
|
-
|
|
91
|
-
【用手柄的话按下左摇杆(L3)】,和 L 是同一件事。
|
|
92
|
-
屏幕上那行字会自己判断你在用键盘还是手柄,显示你真正该按的那个。
|
|
93
|
-
|
|
94
|
-
(配对键原来是 J,这一版改成了 L。因为 J 是游戏自己
|
|
95
|
-
「打开背包并翻到笔记页」的默认键,按一下会同时干两件事。
|
|
96
|
-
L 在游戏的默认键位里没人用。)
|
|
97
|
-
|
|
98
|
-
6. 之后这两个存档必须两个人都在线才能打开。
|
|
99
|
-
如果对方不来、或者两边一直停在「Waiting for XXX」不动,
|
|
100
|
-
你会被定住不能移动,屏幕上会写着在等谁。
|
|
101
|
-
【这时按 K】就能退出双人存档、自己单独玩。
|
|
102
|
-
注意:这只解开你这边,对方要自己也按一次 K。
|
|
103
|
-
|
|
104
|
-
※ 不要去聊天框打 /coopsave off。被定住的时候聊天框打不开;
|
|
105
|
-
而且只要对方还在线,那条指令也只是【请求对方同意】,
|
|
106
|
-
并不会放你走。K 才是真正的出路。
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
四、第一次玩的建议
|
|
110
|
-
------------------
|
|
111
|
-
|
|
112
|
-
* 两个人都【开新档】。
|
|
113
|
-
配对会检查双方已击败的 Boss 是否一致,老档大概率对不上。
|
|
114
|
-
|
|
115
|
-
* 连接和等待室都已经实测跑通过(中国 ↔ 马来西亚,走 Steam 中继)。
|
|
116
|
-
|
|
117
|
-
* 【之前卡在「Waiting for XXX」的原因已经找到并修掉了】
|
|
118
|
-
服务器把所有玩家的网络数据放在同一个拼包缓冲区里,而且是先拼字节、
|
|
119
|
-
后判断这包是谁发的。双人存档要同步的世界进度是全游戏唯一一个
|
|
120
|
-
大到需要拆包发送的数据,一拆包,两个人的数据就会被粘在一起,
|
|
121
|
-
连接的分帧从此错乱、五秒后超时重连,于是校验永远走不完。
|
|
122
|
-
|
|
123
|
-
这也解释了为什么配对、聊天、看到对方走路一直都正常——
|
|
124
|
-
那些包都很小,从来不需要拆。
|
|
125
|
-
|
|
126
|
-
现在每条连接各用各的缓冲区。
|
|
127
|
-
【这个修复已经实机验证通过】,两个人已经正常连上并一起玩过了。
|
|
128
|
-
万一还卡:按 K 脱身,然后把两边的日志都发回来。
|
|
129
|
-
|
|
130
|
-
备份脚本会自动做,位置见上面第一节。
|
|
131
|
-
|
|
132
|
-
* 【从这一版开始,敌人和 Boss 才是真正同步的】
|
|
133
|
-
在这之前,控制这件事的开关默认是关的,而且没有任何界面能打开它,
|
|
134
|
-
所以你们其实是各打各的:同一只怪在你这边死了、在她那边还站着,
|
|
135
|
-
打完的记录也只记在动手的那个人身上。
|
|
136
|
-
现在这个开关被固定为常开,配置文件里存着的旧设置不再起作用。
|
|
137
|
-
【两个人都必须重装这一版】,只有一个人装是没用的。
|
|
138
|
-
|
|
139
|
-
顺带说一句:Boss 的击败记录本来就是各记各的,不会互相抄,
|
|
140
|
-
这是当初定好的规则(剧情进度共享,战绩和拾取各归各的)。
|
|
141
|
-
所以如果一个人已经打过、另一个人没打过,
|
|
142
|
-
那只怪在没打过的那个人的世界里还在,两个人可以一起再打一遍,
|
|
143
|
-
这次两边都会拿到记录。
|
|
144
|
-
|
|
145
|
-
* 【茧:平时各看各的;但你死了之后,队友可以把你拉起来】
|
|
146
|
-
平时的规则没变:你只看得见【自己】的茧,对方也碰不到你的。
|
|
147
|
-
|
|
148
|
-
新加的是救人。你死掉之后【不会立刻回长椅】,会先在原地等一会儿,
|
|
149
|
-
最多 45 秒。这段时间里,你的茧会出现在【队友】那边,
|
|
150
|
-
她打【5 下】就能把你拉起来:
|
|
151
|
-
在你倒下的地方站起来,血量是你上限的【一半】(向下取整),
|
|
152
|
-
茧里的钱和丝也一起还给你,等于这一次没白死。
|
|
153
|
-
|
|
154
|
-
等的时候屏幕上有一行字,写着在等谁、对方已经打了几下。
|
|
155
|
-
不想等了就【按 K】,立刻回长椅、按原来的规则结算,
|
|
156
|
-
你的茧同时从队友那边消失。等满 45 秒没人来,也一样自动回长椅。
|
|
157
|
-
(注意:这里的 K 只是「不等了」,不会解除你们的双人存档。)
|
|
158
|
-
|
|
159
|
-
【两个人都死了,就都直接回长椅】,不会互相干等,
|
|
160
|
-
也不会出现谁站在那儿等一个同样躺着的人。
|
|
161
|
-
|
|
162
|
-
这一条是刚写的,【还没有实机验证过】。
|
|
163
|
-
真卡住不动了(按理说等满 45 秒一定会自己回长椅),
|
|
164
|
-
Alt+F4 强退就行,存档还停在上一次保存的地方。
|
|
165
|
-
|
|
166
|
-
这里原本藏着一个很隐蔽的问题,已经修掉:
|
|
167
|
-
两个人的茧在各自游戏里【名字完全一样】,而模组会把「打碎世界物件」
|
|
168
|
-
这类命中按名字转发给对方重放。于是她打她自己的茧,
|
|
169
|
-
你这边被打碎的是【你的】茧——而且和你们死在哪儿没关系,
|
|
170
|
-
隔着半个房间照样会中。茧里的钱是记在存档里的,
|
|
171
|
-
被这样打掉会直接结算掉、还会抹掉你那个茧的记录。
|
|
172
|
-
现在茧被排除在转发之外,对方攻击的副本也碰不到它。
|
|
173
|
-
你自己打自己的茧,一切照旧。
|
|
174
|
-
|
|
175
|
-
* 【修掉了「后进房间的人,满屋子怪全定住」】
|
|
176
|
-
只要你走进一个对方已经清过的房间,那些怪在你这边会全部卡死不动。
|
|
177
|
-
原因是服务器只记得「这怪没血了」,却不记得「它死过」,
|
|
178
|
-
于是你这边的怪变成了一具零血的活尸:它每一帧都想死,
|
|
179
|
-
每一帧都被模组挡回去,一个房间能刷出七千多次,整屋子就此卡住。
|
|
180
|
-
现在补状态时会把这类怪真正结算掉一次,进门看到的是尸体而不是活尸。
|
|
181
|
-
|
|
182
|
-
* 【昵称会记住了】
|
|
183
|
-
以前只有「直连 IP」和「直连开房」两条路会保存昵称,而你们用的是 Steam
|
|
184
|
-
开房 / 加入 / 房间列表,这几条一条都不保存 —— 所以不是你忘了填,
|
|
185
|
-
是它在你的用法下从来没存过。现在填一次就记住,下次自动带出来。
|
|
186
|
-
|
|
187
|
-
* 【进游戏之后不用再碰键盘了】
|
|
188
|
-
配对(L)和放弃等待(K)这两个动作,手柄都可以【按下左摇杆】来完成。
|
|
189
|
-
选左摇杆是因为它是游戏唯一没占用的按钮 —— 扳机、肩键、四个面键、
|
|
190
|
-
右摇杆按下、旁边那两个键,游戏全都用掉了。
|
|
191
|
-
这两个动作不会同时出现(没配对时才问你要不要配对,配对了才谈得上放弃),
|
|
192
|
-
所以共用一个键不会冲突。
|
|
193
|
-
聊天键故意没给手柄绑:手柄本来就打不了字,绑了也只是开一个填不进去的框。
|
|
194
|
-
|
|
195
|
-
※ 联机大厅(连接、房间列表、等待室)目前仍然要用鼠标键盘,这是你定的。
|
|
196
|
-
|
|
197
|
-
* 【手柄在选存档界面按不进去,这一版尝试修了】
|
|
198
|
-
原因是模组会自己建一套界面输入系统,而负责「在菜单里把它关掉」的代码
|
|
199
|
-
是挂在场景切换上的 —— 但模组本身就是在主菜单里启动的,此后到进游戏
|
|
200
|
-
之前根本不会再切场景,所以它整个菜单流程都开着。现在它一建出来
|
|
201
|
-
就先判断一次当前场景。
|
|
202
|
-
|
|
203
|
-
顺便解释那个最奇怪的地方:为什么手柄能上下切换存档却按不进去,
|
|
204
|
-
键盘却可以。游戏判定「确认」时分成两支——
|
|
205
|
-
键盘那支除了确认键还认【跳跃键】,手柄那支【只认确认键】,没有替补。
|
|
206
|
-
所以确认信号一旦出不来,键盘还有后路,手柄直接没辙。
|
|
207
|
-
|
|
208
|
-
※ 这一条【没有实机验证过】。如果还是按不进去,
|
|
209
|
-
把游戏目录下 BepInEx\LogOutput.log 发我:这一版特意在进选存档界面时
|
|
210
|
-
写了一行「Save selection is driven by ...」,那行字会直接说明
|
|
211
|
-
是谁在管这个界面,不用再猜。
|
|
212
|
-
|
|
213
|
-
* 聊天框默认按 Y 打开,打 /help 可以看到所有指令。
|
|
214
|
-
|
|
215
|
-
* 【修掉了「在聊天框打字会误触发快捷键」】
|
|
216
|
-
以前模组只屏蔽了游戏自己的操作,没屏蔽它自己的快捷键。
|
|
217
|
-
所以在聊天框里打一句带 k 的话(比如「ok」)就等于按了一次 K ——
|
|
218
|
-
配上新的救人机制,那就是当场放弃等救援、直接回长椅;
|
|
219
|
-
打带配对键的字则会发一次配对请求。
|
|
220
|
-
现在聊天框一打开,模组自己的快捷键就整个关掉,关掉聊天再恢复。
|
|
221
|
-
另外 Enter 以前在聊天关着的时候也会白触发一次,现在不会了。
|
|
222
|
-
|
|
223
|
-
* 【模组界面跟着游戏语言走】
|
|
224
|
-
以前模组自己的字全是英文,游戏明明是中文的,
|
|
225
|
-
一到模组这儿就换语言。
|
|
226
|
-
现在游戏设成中文,联机界面、聊天里的提示、
|
|
227
|
-
等人和救人的提示都是中文;设成别的语言还是英文。
|
|
228
|
-
在游戏选项里中途换语言也会立刻跟着变,不用重开游戏。
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
五、出问题的话
|
|
232
|
-
--------------
|
|
233
|
-
|
|
234
|
-
游戏目录下 BepInEx\LogOutput.log 是日志,
|
|
235
|
-
出问题把它发回来就能定位。
|
|
236
|
-
|
|
237
|
-
如果是卡在「Waiting for XXX」,日志里这两句最有用:
|
|
238
|
-
Starting a check —— 会列出三个存档 key,一眼能看出哪个对不上
|
|
239
|
-
Turned down a hello —— 说明有一条握手消息被丢掉了,以及丢的原因
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
六、这东西是谁写的
|
|
243
|
-
------------------
|
|
244
|
-
|
|
245
|
-
联机功能本身、以及这里几乎全部的代码,都是 Extremelyd1 写的
|
|
246
|
-
(原项目:github.com/Extremelyd1/SSMP)。
|
|
247
|
-
这一份只是在它上面加了「两个人共用一条流程」的双人存档,
|
|
248
|
-
沿用和原作相同的 LGPL-2.1 许可证。
|
|
249
|
-
|
|
250
|
-
※ 有任何问题请找我,【不要去原作者的 Discord 或 issues 页面】。
|
|
251
|
-
这些改动不是人家写的,人家既复现不了也没义务解释。
|
|
252
|
-
|
|
253
|
-
包里还有两个别人的东西:
|
|
254
|
-
BouncyCastle.Cryptography.dll —— 第三方加密库,MIT 许可证,
|
|
255
|
-
版权归 The Legion of the Bouncy Castle Inc.,
|
|
256
|
-
完整条款见同目录下的 LICENSE-BouncyCastle.md。
|
|
257
|
-
BepInEx_win_x64_5.4.23.4.zip —— BepInEx 官方发布的原包,
|
|
258
|
-
一个字节都没有改过。
|
|
1
|
+
丝之歌联机模组(SSMP 自制版)——一键安装
|
|
2
|
+
==========================================
|
|
3
|
+
|
|
4
|
+
这是 SSMP 联机模组的一个自制版本,比公开版多了「双人存档」:
|
|
5
|
+
两个人共用一条流程,任务、世界变化、剧情道具会互相同步。
|
|
6
|
+
|
|
7
|
+
重要:两个人必须装【同一份】这个压缩包,不能一个人用公开版。
|
|
8
|
+
|
|
9
|
+
【从这一版开始,版本不一致会被直接拦住。】
|
|
10
|
+
加入房间时会比对双方的版本,不一样就不让连,并且明确告诉你
|
|
11
|
+
「你们装的版本不同」,而不是连上之后表现出一堆对不上的怪事。
|
|
12
|
+
|
|
13
|
+
※ 代价是:这一版【不认识任何旧版本】。
|
|
14
|
+
所以【两个人必须一起换成这一版】,只有一个人装的话,
|
|
15
|
+
你们会连不上——这是正常的,不是坏了。
|
|
16
|
+
这笔账只付一次,以后就不会再有「一个人更了一个人没更」还不知情的情况。
|
|
17
|
+
|
|
18
|
+
(顺带更正我之前在这里写错的话:我原先说「版本不一致配对时会提示」,
|
|
19
|
+
那时候是【不对的】,当时根本没有任何东西在比对版本。现在才是真的。)
|
|
20
|
+
|
|
21
|
+
【这个包是完全离线的】模组加载器已经放在包里,
|
|
22
|
+
安装过程不需要联网,不用梯子,也不受任何网站能不能打开的影响。
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
一、怎么装(双击一下就行)
|
|
26
|
+
--------------------------
|
|
27
|
+
|
|
28
|
+
1. 把这个压缩包【完整解压】到任意位置(比如桌面)。
|
|
29
|
+
不要只解压出单个文件,INSTALL.bat、SSMP 文件夹和
|
|
30
|
+
BepInEx_win_x64_5.4.23.4.zip 必须在一起。
|
|
31
|
+
|
|
32
|
+
2. 双击 INSTALL.bat。
|
|
33
|
+
|
|
34
|
+
3. 等它跑完,看到绿色的 Done 就好了。
|
|
35
|
+
|
|
36
|
+
它会自己做这几件事:
|
|
37
|
+
- 找到你的 Silksong 安装位置(找不到会让你把路径粘进去)
|
|
38
|
+
- 先把你的存档备份成 zip,放在这个文件夹里的 save-backups\ 下
|
|
39
|
+
(只留最近 3 份,更旧的会自动删掉;它不会碰别的文件)
|
|
40
|
+
- 用包里自带的加载器装好(不联网)
|
|
41
|
+
- 把联机插件放进去
|
|
42
|
+
- 最后检查一遍有没有装成功
|
|
43
|
+
|
|
44
|
+
窗口里的提示是英文的,因为 Windows 自带的 PowerShell 显示中文
|
|
45
|
+
经常是乱码,英文反而不会出错。
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
二、这个脚本安全吗
|
|
49
|
+
------------------
|
|
50
|
+
|
|
51
|
+
- 它只往【游戏目录】写东西,外加一个存档备份。
|
|
52
|
+
不改注册表、不改系统设置、不装任何后台程序、不联网。
|
|
53
|
+
- 不需要管理员权限(除非你的游戏装在 C:\Program Files 里)。
|
|
54
|
+
- 想卸载:把游戏目录里的 BepInEx 文件夹、winhttp.dll、
|
|
55
|
+
doorstop_config.ini、.doorstop_version、changelog.txt
|
|
56
|
+
删掉就完全干净了。
|
|
57
|
+
|
|
58
|
+
包里那个 BepInEx_win_x64_5.4.23.4.zip 是 BepInEx 官方在 GitHub
|
|
59
|
+
上发布的原版文件,没有改动过,大小 638,940 字节。
|
|
60
|
+
|
|
61
|
+
有一点要提前说:BepInEx 这类模组加载器的工作方式,是在游戏
|
|
62
|
+
exe 旁边放一个 dll,让游戏启动时连带加载它。这是所有同类
|
|
63
|
+
加载器的通用做法,但这个手法和某些恶意软件相同,所以
|
|
64
|
+
【杀毒软件有时会报毒】。看到告警是这个原因,不是脚本在干别的。
|
|
65
|
+
|
|
66
|
+
真正的风险不在系统,在存档:模组有可能弄坏存档,
|
|
67
|
+
所以脚本会先备份。
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
三、怎么一起玩
|
|
71
|
+
--------------
|
|
72
|
+
|
|
73
|
+
1. 【从 Steam 启动游戏】,不要直接双击 exe。
|
|
74
|
+
|
|
75
|
+
2. 一个人开房:选 "Steam" 那一页,点 Create Lobby。
|
|
76
|
+
开完房不会直接进游戏,而是停在一个【等待室】里。
|
|
77
|
+
|
|
78
|
+
3. 房主在等待室里点 INVITE FRIEND,会直接弹出 Steam 的邀请框,
|
|
79
|
+
不用自己去找 Steam 覆盖层。对方接受邀请就会进到同一个等待室。
|
|
80
|
+
|
|
81
|
+
4. 两个人各自点一次 I'M READY。
|
|
82
|
+
名单上能看到对方是 READY 还是 NOT READY。
|
|
83
|
+
【两个人都 READY 之后】,两边才会同时打开各自的选存档界面。
|
|
84
|
+
反悔就再点一次取消。
|
|
85
|
+
|
|
86
|
+
5. 进游戏后,屏幕上方会出现一行字,
|
|
87
|
+
写着「按 L 和 XXX 组成双人存档」。
|
|
88
|
+
两个人都按一下 L 就配对好了。
|
|
89
|
+
不想配对就别理它,它会自己消失。
|
|
90
|
+
|
|
91
|
+
【用手柄的话按下左摇杆(L3)】,和 L 是同一件事。
|
|
92
|
+
屏幕上那行字会自己判断你在用键盘还是手柄,显示你真正该按的那个。
|
|
93
|
+
|
|
94
|
+
(配对键原来是 J,这一版改成了 L。因为 J 是游戏自己
|
|
95
|
+
「打开背包并翻到笔记页」的默认键,按一下会同时干两件事。
|
|
96
|
+
L 在游戏的默认键位里没人用。)
|
|
97
|
+
|
|
98
|
+
6. 之后这两个存档必须两个人都在线才能打开。
|
|
99
|
+
如果对方不来、或者两边一直停在「Waiting for XXX」不动,
|
|
100
|
+
你会被定住不能移动,屏幕上会写着在等谁。
|
|
101
|
+
【这时按 K】就能退出双人存档、自己单独玩。
|
|
102
|
+
注意:这只解开你这边,对方要自己也按一次 K。
|
|
103
|
+
|
|
104
|
+
※ 不要去聊天框打 /coopsave off。被定住的时候聊天框打不开;
|
|
105
|
+
而且只要对方还在线,那条指令也只是【请求对方同意】,
|
|
106
|
+
并不会放你走。K 才是真正的出路。
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
四、第一次玩的建议
|
|
110
|
+
------------------
|
|
111
|
+
|
|
112
|
+
* 两个人都【开新档】。
|
|
113
|
+
配对会检查双方已击败的 Boss 是否一致,老档大概率对不上。
|
|
114
|
+
|
|
115
|
+
* 连接和等待室都已经实测跑通过(中国 ↔ 马来西亚,走 Steam 中继)。
|
|
116
|
+
|
|
117
|
+
* 【之前卡在「Waiting for XXX」的原因已经找到并修掉了】
|
|
118
|
+
服务器把所有玩家的网络数据放在同一个拼包缓冲区里,而且是先拼字节、
|
|
119
|
+
后判断这包是谁发的。双人存档要同步的世界进度是全游戏唯一一个
|
|
120
|
+
大到需要拆包发送的数据,一拆包,两个人的数据就会被粘在一起,
|
|
121
|
+
连接的分帧从此错乱、五秒后超时重连,于是校验永远走不完。
|
|
122
|
+
|
|
123
|
+
这也解释了为什么配对、聊天、看到对方走路一直都正常——
|
|
124
|
+
那些包都很小,从来不需要拆。
|
|
125
|
+
|
|
126
|
+
现在每条连接各用各的缓冲区。
|
|
127
|
+
【这个修复已经实机验证通过】,两个人已经正常连上并一起玩过了。
|
|
128
|
+
万一还卡:按 K 脱身,然后把两边的日志都发回来。
|
|
129
|
+
|
|
130
|
+
备份脚本会自动做,位置见上面第一节。
|
|
131
|
+
|
|
132
|
+
* 【从这一版开始,敌人和 Boss 才是真正同步的】
|
|
133
|
+
在这之前,控制这件事的开关默认是关的,而且没有任何界面能打开它,
|
|
134
|
+
所以你们其实是各打各的:同一只怪在你这边死了、在她那边还站着,
|
|
135
|
+
打完的记录也只记在动手的那个人身上。
|
|
136
|
+
现在这个开关被固定为常开,配置文件里存着的旧设置不再起作用。
|
|
137
|
+
【两个人都必须重装这一版】,只有一个人装是没用的。
|
|
138
|
+
|
|
139
|
+
顺带说一句:Boss 的击败记录本来就是各记各的,不会互相抄,
|
|
140
|
+
这是当初定好的规则(剧情进度共享,战绩和拾取各归各的)。
|
|
141
|
+
所以如果一个人已经打过、另一个人没打过,
|
|
142
|
+
那只怪在没打过的那个人的世界里还在,两个人可以一起再打一遍,
|
|
143
|
+
这次两边都会拿到记录。
|
|
144
|
+
|
|
145
|
+
* 【茧:平时各看各的;但你死了之后,队友可以把你拉起来】
|
|
146
|
+
平时的规则没变:你只看得见【自己】的茧,对方也碰不到你的。
|
|
147
|
+
|
|
148
|
+
新加的是救人。你死掉之后【不会立刻回长椅】,会先在原地等一会儿,
|
|
149
|
+
最多 45 秒。这段时间里,你的茧会出现在【队友】那边,
|
|
150
|
+
她打【5 下】就能把你拉起来:
|
|
151
|
+
在你倒下的地方站起来,血量是你上限的【一半】(向下取整),
|
|
152
|
+
茧里的钱和丝也一起还给你,等于这一次没白死。
|
|
153
|
+
|
|
154
|
+
等的时候屏幕上有一行字,写着在等谁、对方已经打了几下。
|
|
155
|
+
不想等了就【按 K】,立刻回长椅、按原来的规则结算,
|
|
156
|
+
你的茧同时从队友那边消失。等满 45 秒没人来,也一样自动回长椅。
|
|
157
|
+
(注意:这里的 K 只是「不等了」,不会解除你们的双人存档。)
|
|
158
|
+
|
|
159
|
+
【两个人都死了,就都直接回长椅】,不会互相干等,
|
|
160
|
+
也不会出现谁站在那儿等一个同样躺着的人。
|
|
161
|
+
|
|
162
|
+
这一条是刚写的,【还没有实机验证过】。
|
|
163
|
+
真卡住不动了(按理说等满 45 秒一定会自己回长椅),
|
|
164
|
+
Alt+F4 强退就行,存档还停在上一次保存的地方。
|
|
165
|
+
|
|
166
|
+
这里原本藏着一个很隐蔽的问题,已经修掉:
|
|
167
|
+
两个人的茧在各自游戏里【名字完全一样】,而模组会把「打碎世界物件」
|
|
168
|
+
这类命中按名字转发给对方重放。于是她打她自己的茧,
|
|
169
|
+
你这边被打碎的是【你的】茧——而且和你们死在哪儿没关系,
|
|
170
|
+
隔着半个房间照样会中。茧里的钱是记在存档里的,
|
|
171
|
+
被这样打掉会直接结算掉、还会抹掉你那个茧的记录。
|
|
172
|
+
现在茧被排除在转发之外,对方攻击的副本也碰不到它。
|
|
173
|
+
你自己打自己的茧,一切照旧。
|
|
174
|
+
|
|
175
|
+
* 【修掉了「后进房间的人,满屋子怪全定住」】
|
|
176
|
+
只要你走进一个对方已经清过的房间,那些怪在你这边会全部卡死不动。
|
|
177
|
+
原因是服务器只记得「这怪没血了」,却不记得「它死过」,
|
|
178
|
+
于是你这边的怪变成了一具零血的活尸:它每一帧都想死,
|
|
179
|
+
每一帧都被模组挡回去,一个房间能刷出七千多次,整屋子就此卡住。
|
|
180
|
+
现在补状态时会把这类怪真正结算掉一次,进门看到的是尸体而不是活尸。
|
|
181
|
+
|
|
182
|
+
* 【昵称会记住了】
|
|
183
|
+
以前只有「直连 IP」和「直连开房」两条路会保存昵称,而你们用的是 Steam
|
|
184
|
+
开房 / 加入 / 房间列表,这几条一条都不保存 —— 所以不是你忘了填,
|
|
185
|
+
是它在你的用法下从来没存过。现在填一次就记住,下次自动带出来。
|
|
186
|
+
|
|
187
|
+
* 【进游戏之后不用再碰键盘了】
|
|
188
|
+
配对(L)和放弃等待(K)这两个动作,手柄都可以【按下左摇杆】来完成。
|
|
189
|
+
选左摇杆是因为它是游戏唯一没占用的按钮 —— 扳机、肩键、四个面键、
|
|
190
|
+
右摇杆按下、旁边那两个键,游戏全都用掉了。
|
|
191
|
+
这两个动作不会同时出现(没配对时才问你要不要配对,配对了才谈得上放弃),
|
|
192
|
+
所以共用一个键不会冲突。
|
|
193
|
+
聊天键故意没给手柄绑:手柄本来就打不了字,绑了也只是开一个填不进去的框。
|
|
194
|
+
|
|
195
|
+
※ 联机大厅(连接、房间列表、等待室)目前仍然要用鼠标键盘,这是你定的。
|
|
196
|
+
|
|
197
|
+
* 【手柄在选存档界面按不进去,这一版尝试修了】
|
|
198
|
+
原因是模组会自己建一套界面输入系统,而负责「在菜单里把它关掉」的代码
|
|
199
|
+
是挂在场景切换上的 —— 但模组本身就是在主菜单里启动的,此后到进游戏
|
|
200
|
+
之前根本不会再切场景,所以它整个菜单流程都开着。现在它一建出来
|
|
201
|
+
就先判断一次当前场景。
|
|
202
|
+
|
|
203
|
+
顺便解释那个最奇怪的地方:为什么手柄能上下切换存档却按不进去,
|
|
204
|
+
键盘却可以。游戏判定「确认」时分成两支——
|
|
205
|
+
键盘那支除了确认键还认【跳跃键】,手柄那支【只认确认键】,没有替补。
|
|
206
|
+
所以确认信号一旦出不来,键盘还有后路,手柄直接没辙。
|
|
207
|
+
|
|
208
|
+
※ 这一条【没有实机验证过】。如果还是按不进去,
|
|
209
|
+
把游戏目录下 BepInEx\LogOutput.log 发我:这一版特意在进选存档界面时
|
|
210
|
+
写了一行「Save selection is driven by ...」,那行字会直接说明
|
|
211
|
+
是谁在管这个界面,不用再猜。
|
|
212
|
+
|
|
213
|
+
* 聊天框默认按 Y 打开,打 /help 可以看到所有指令。
|
|
214
|
+
|
|
215
|
+
* 【修掉了「在聊天框打字会误触发快捷键」】
|
|
216
|
+
以前模组只屏蔽了游戏自己的操作,没屏蔽它自己的快捷键。
|
|
217
|
+
所以在聊天框里打一句带 k 的话(比如「ok」)就等于按了一次 K ——
|
|
218
|
+
配上新的救人机制,那就是当场放弃等救援、直接回长椅;
|
|
219
|
+
打带配对键的字则会发一次配对请求。
|
|
220
|
+
现在聊天框一打开,模组自己的快捷键就整个关掉,关掉聊天再恢复。
|
|
221
|
+
另外 Enter 以前在聊天关着的时候也会白触发一次,现在不会了。
|
|
222
|
+
|
|
223
|
+
* 【模组界面跟着游戏语言走】
|
|
224
|
+
以前模组自己的字全是英文,游戏明明是中文的,
|
|
225
|
+
一到模组这儿就换语言。
|
|
226
|
+
现在游戏设成中文,联机界面、聊天里的提示、
|
|
227
|
+
等人和救人的提示都是中文;设成别的语言还是英文。
|
|
228
|
+
在游戏选项里中途换语言也会立刻跟着变,不用重开游戏。
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
五、出问题的话
|
|
232
|
+
--------------
|
|
233
|
+
|
|
234
|
+
游戏目录下 BepInEx\LogOutput.log 是日志,
|
|
235
|
+
出问题把它发回来就能定位。
|
|
236
|
+
|
|
237
|
+
如果是卡在「Waiting for XXX」,日志里这两句最有用:
|
|
238
|
+
Starting a check —— 会列出三个存档 key,一眼能看出哪个对不上
|
|
239
|
+
Turned down a hello —— 说明有一条握手消息被丢掉了,以及丢的原因
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
六、这东西是谁写的
|
|
243
|
+
------------------
|
|
244
|
+
|
|
245
|
+
联机功能本身、以及这里几乎全部的代码,都是 Extremelyd1 写的
|
|
246
|
+
(原项目:github.com/Extremelyd1/SSMP)。
|
|
247
|
+
这一份只是在它上面加了「两个人共用一条流程」的双人存档,
|
|
248
|
+
沿用和原作相同的 LGPL-2.1 许可证。
|
|
249
|
+
|
|
250
|
+
※ 有任何问题请找我,【不要去原作者的 Discord 或 issues 页面】。
|
|
251
|
+
这些改动不是人家写的,人家既复现不了也没义务解释。
|
|
252
|
+
|
|
253
|
+
包里还有两个别人的东西:
|
|
254
|
+
BouncyCastle.Cryptography.dll —— 第三方加密库,MIT 许可证,
|
|
255
|
+
版权归 The Legion of the Bouncy Castle Inc.,
|
|
256
|
+
完整条款见同目录下的 LICENSE-BouncyCastle.md。
|
|
257
|
+
BepInEx_win_x64_5.4.23.4.zip —— BepInEx 官方发布的原包,
|
|
258
|
+
一个字节都没有改过。
|
package/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# silksong-coop-mod 0.4.
|
|
2
|
-
|
|
3
|
-
The files a player needs to install a two-player co-op build of **SSMP**, packaged so they can be fetched from
|
|
4
|
-
a mirror that is reachable inside mainland China. This is not a Node library: nothing here is imported or run
|
|
5
|
-
by `npm install`.
|
|
6
|
-
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
Download and unpack the tarball, then double-click `INSTALL.bat`. `INSTALL.txt` explains the rest, in Chinese.
|
|
10
|
-
|
|
11
|
-
The BepInEx loader is included, so the install needs no network access at all.
|
|
12
|
-
|
|
13
|
-
## Credit and licence
|
|
14
|
-
|
|
15
|
-
The multiplayer mod is the work of [Extremelyd1](https://github.com/Extremelyd1/SSMP). This is a modified copy
|
|
16
|
-
that adds a shared two-player save; please do not take questions about it to the original author. Distributed
|
|
17
|
-
under the GNU LGPL 2.1 - see `LICENSE`. Built from https://github.com/Candy-649/SSMP at `
|
|
1
|
+
# silksong-coop-mod 0.4.24
|
|
2
|
+
|
|
3
|
+
The files a player needs to install a two-player co-op build of **SSMP**, packaged so they can be fetched from
|
|
4
|
+
a mirror that is reachable inside mainland China. This is not a Node library: nothing here is imported or run
|
|
5
|
+
by `npm install`.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
Download and unpack the tarball, then double-click `INSTALL.bat`. `INSTALL.txt` explains the rest, in Chinese.
|
|
10
|
+
|
|
11
|
+
The BepInEx loader is included, so the install needs no network access at all.
|
|
12
|
+
|
|
13
|
+
## Credit and licence
|
|
14
|
+
|
|
15
|
+
The multiplayer mod is the work of [Extremelyd1](https://github.com/Extremelyd1/SSMP). This is a modified copy
|
|
16
|
+
that adds a shared two-player save; please do not take questions about it to the original author. Distributed
|
|
17
|
+
under the GNU LGPL 2.1 - see `LICENSE`. Built from https://github.com/Candy-649/SSMP at `78f4a74`.
|
package/SSMP/SSMP.dll
CHANGED
|
Binary file
|
package/UPDATE.bat
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
@echo off
|
|
2
|
-
rem Double-click this to pull the newest co-op build. It only replaces the plugin of an install that already
|
|
3
|
-
rem works; run INSTALL.bat first if the mod is not installed yet.
|
|
4
|
-
rem
|
|
5
|
-
rem -ExecutionPolicy Bypass applies to this one run only and changes no system setting. pwsh is preferred
|
|
6
|
-
rem because Windows PowerShell 5.1 mangles UTF-8 without a BOM.
|
|
7
|
-
where pwsh >nul 2>nul
|
|
8
|
-
if %errorlevel%==0 (
|
|
9
|
-
pwsh -NoProfile -ExecutionPolicy Bypass -File "%~dp0update.ps1" %*
|
|
10
|
-
) else (
|
|
11
|
-
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0update.ps1" %*
|
|
12
|
-
)
|
|
13
|
-
echo.
|
|
14
|
-
pause
|
|
1
|
+
@echo off
|
|
2
|
+
rem Double-click this to pull the newest co-op build. It only replaces the plugin of an install that already
|
|
3
|
+
rem works; run INSTALL.bat first if the mod is not installed yet.
|
|
4
|
+
rem
|
|
5
|
+
rem -ExecutionPolicy Bypass applies to this one run only and changes no system setting. pwsh is preferred
|
|
6
|
+
rem because Windows PowerShell 5.1 mangles UTF-8 without a BOM.
|
|
7
|
+
where pwsh >nul 2>nul
|
|
8
|
+
if %errorlevel%==0 (
|
|
9
|
+
pwsh -NoProfile -ExecutionPolicy Bypass -File "%~dp0update.ps1" %*
|
|
10
|
+
) else (
|
|
11
|
+
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0update.ps1" %*
|
|
12
|
+
)
|
|
13
|
+
echo.
|
|
14
|
+
pause
|