
赏金传送
带着悬赏目标一起传送。游戏允许你传送却把他落下;这个模组会带上他,活着且仍然值得交付。四字节补丁和一个钩子,不修改任何游戏文件,每个地址都先对照可执行文件检查过。适用于 Crimson Desert 2.03.00。
查看大图[size=5][b]悬赏传送[/b][/size]
[i]背着悬赏目标进行地图传送。适用于 Crimson Desert 2.03.00。[/i]
抓住他,打开地图,选择任意地点。他会跟着你一起传送,落地后依然可以交任务。
原版游戏并不会阻止你传送。它只是不会带上他。你独自抵达,而你花了整场战斗才绑住的那个人要么回到了你发现他的地方,要么从世界中消失了。[b]它不会修改任何游戏文件。[/b]四处两字节补丁和一个钩子,在游戏运行时写入,在插件卸载时撤销。
[size=4][b]它改变了什么[/b][/size]
[list]
[][b]传送不再让他掉落。[/b]搬运某人在游戏中被称为 catch,而传送会在三个不同的地方故意结束 catch,一次在服务端,两次在客户端。这三处都被跳过了。
[][b]离开区域不再删除他。[/b]传送离开会清除你所在位置由你的会话生成的所有 actor,而被抓的逃犯就是其中之一。它会保留其他人仍然持有的东西,但没有任何东西告诉它你正持有他。现在有了。
[][b]一分钟后他仍然在你背上。[/b]第四处逻辑会清除搬运动画不再支撑的 catch,而到达某地时会重置这些标志。它会在每次落地后大约一秒运行,这就是为什么在发现它之前,五次测试运行都以他脸朝下倒在目的地告终。
[/list]
[size=4][b]设置[/b][/size]
BountyTeleportation.ini 位于插件旁边,在 [Settings] 下。两项默认都开启,通常都不需要改动。该文件只在游戏启动时读取一次。
[list]
[][b]KeepCatch[/b] (1) 在传送过程中保持对 catch 的持有。
[][b]KeepCarried[/b] (1) 保住这个人本身,方式是告诉离开时的清理逻辑有人仍然持有他。单独开启它不起作用,因为释放逻辑先运行,并清除了它所读取的标志。
[/list]
[size=4][b]安装[/b][/size]
[b]使用 Definitive Mod Manager (DMM)[/b]
[list=1]
[]下载 DMM 文件并将其拖放到 DMM 窗口上。
[]启用并 Mount。
[/list]
[b]手动安装[/b]
[list=1]
[]Ultimate ASI Loader 必须放在游戏的 bin64 文件夹中,与 CrimsonDesert.exe 相邻。如果它命名为 version.dll 且没有任何加载,请将其重命名为 winmm.dll。
[]在游戏关闭的情况下,将 BountyTeleportation.asi 和 BountyTeleportation.ini 复制到 bin64。
[/list]DMM 下载仅包含插件本身,这也是 DMM 注册的全部内容。它会在你首次运行时自行写入相同的 ini,所以两种方式都不缺东西。手动下载额外包含 readme 和许可证。
[b]卸载[/b]就是从 bin64 中删除 BountyTeleportation 文件。
[size=4][b]在移除它之前[/b][/size]
[color=#f0ad4e][b]先放下你正在搬运的人。[/b][/color]在搬运途中移除插件会让游戏持有一个 catch,而之后没有任何东西能自行清除它,解决办法与下面相同。
[size=4][b]已知限制[/b][/size]
[list]
[]KeepCatch 的第四处补丁是游戏自身对失效 catch 的清理,它会对世界中的每一个 catch 生效,而不只是你的。它的存在是为了解除动画已经失效的搬运状态。如果某次拾取中途出错,导致你卡在搬运空气的状态,请设置 KeepCatch=0,启动游戏一次,它就会清除。
[]肩上扛着一个活着的逃犯走进城镇,对那里的人产生的影响如你所料。那是游戏自身的反应,不是本模组添加的。
[]悬赏目标是它构建和测试的对象。你可以拾取的任何其他东西均未经测试。
[/list]
[size=4][b]兼容性[/b][/size]
[list]
[]已在 Crimson Desert 2.03.00(CrimsonDesert.exe 1.0.0.2944)、Steam 上测试。尚未针对 2.02.00 进行验证。
[]写入或挂钩了五个地址,每个地址在写入任何内容之前都会与应有的字节进行校验。游戏补丁会移动它们,届时插件将完全不写入任何内容,并在日志中标明失败的校验。它会停止工作,而不是写到错误的地方。
[*]除了加载器之外,它与其他插件没有任何共享。它不读取输入,也不绑定按键。
[/list]
[size=4][b]如果出了问题[/b][/size]
BountyTeleportation.log 会写在插件旁边,每次会话大约二十行,没有需要开启的设置。它会标明它写入的每个地址,以及每次它告诉游戏保留某人的记录。请将其附在 bugs 标签页的帖子或 GitHub issue 中。
[size=4][b]它是如何被发现的[/b][/size]
通过一个为此专门编写的第二插件,它挂钩了传送和 catch 机制,并记录下它们所做的一切。四处释放中有三处是通过读取搬运状态消失前最后运行的是哪个调用而找到的,每一处都耗费了一次测试运行和一个倒在地上的逃犯。第四处从未以那种方式浮现,因为它根本不在传送路径上,而调用日志无法从你落地后一秒内发生的所有其他事情中把它挑出来。发现它的是以每秒十次的频率监视 catch 组件自身的字节,并记录每一个发生变化的字节。其中一次运行显示,双方在同一个 tick 中丢失了相同的四个字段,来自同一个调用点,并指出了它。两个插件和完整记录都在 GitHub 上。
[size=4][b]文件[/b][/size]
1.0.0 的 SHA-256:
[code]18f6e502890a429a68d2e42c0684a4daaa56d5a500d45f985c991dc84522d92e BountyTeleportation-1.0.0-DMM.zip
5add12cedfcacdbd679f0259f215a6af99d6ecb9c1b2f5df4dce5a9f39d4da0c BountyTeleportation-1.0.0.zip
e1259fc16339f938be3cd7ea81c7d22ad0c94504ecbbaa723e1ac1306d6cb627 BountyTeleportation.asi[/code]
VTPROSE
[size=4][b]源码和许可证[/b][/size]
MIT。源码位于 [url=https://github.com/shin2344234/bounty-teleportation]github.com/shin2344234/bounty-teleportation[/url],研究插件也在那里,FEASIBILITY.md 是完整的工作记录,包括那些错误的读数。
[size=4][b]Discord 和 Patreon[/b][/size]
[url=https://discord.gg/AZ2ztQYy74]Shin234's Mods 'n Stuff[/url] 是 Discord,用于提问和了解正在进行的项目。Bug 最好通过 GitHub issues 或 bugs 标签页提交,以便得到跟踪。Patreon 是 [url=https://patreon.com/cw/Shin234]patreon.com/cw/Shin234[/url]。所有发布的内容都保持免费,不会为此保留任何东西。
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。