自动书籍放置器 OBSE(已废弃)

你现在可以“激活”玩家房屋中的书架了。这允许你将书籍添加到一个“容器”中,并整齐地(大多数情况下)堆放在书架上。 现已兼容模组添加的书籍!

该模组的新版本可在此处获取:http://www.tesnexus.com/downloads/file.php?id=10561


本文件已过时


版本 2.0(OBSE 发布版)

版本1.0/1.1由Horny Quintus制作,版本2.0由Langy制作
版本1.1(无需OBSE)可在此处下载:http://www.tesnexus.com/downloads/file.php?id=10561

你现在可以“激活”玩家房屋中的书架。
这将允许你将书籍添加到一个“容器”中,并整齐地(大多数时候)堆放在书架上。
潜行时激活会显示一个简短的选项菜单。
站立时激活仅适用于橱柜,将带你进入橱柜的普通物品栏菜单。

我还添加了两种带架子的容器。一个在贝尼鲁斯庄园,另外两个在布鲁玛。站立时激活以访问库存。注意,原有的橱柜仍然存在,因此运行此模组时不会丢失物品。

注意,脚本实际上并不知道书架上有什么书。
一旦书架被填满,你将无法再堆放更多书籍。
即使你拿走了所有的书,脚本仍会认为书架是满的。
要解决这个问题,请选择“清空”书架的选项。
这将重置书架的记录,你可以像第一次使用它一样重新开始。
你仍然需要拿走所有的书。


版本 2.0 的变更

  • 需要OBSE
  • 现在书架连接到一个容器,允许你将任意书籍添加到书架上,而无需将所有书籍都放在物品栏中
  • 书本放置几乎是瞬间完成的,没有明显的帧率延迟或卡顿——书本只是突然出现在位置上
  • 使用原版书籍模型或采用原版命名系统(根据书籍大小命名模型)的模组添加书籍将自动生效
  • 完全兼容带书套和不带书套的书籍 - 无论如何,书籍都会被归入正确的尺寸类别
  • 当你往书架上放了太多书,或者放了书本以外的物品时,多余的书籍或物品会被放回你的物品栏。
  • 我采用了一个变通方法,使这些提示信息不再显示,否则它们可能会持续相当长的时间——但这可能会导致一些困惑,因为某些书架可能无法容纳所有尺寸的书籍。
  • 如果你尝试将一些尺寸不合适的书放入书架,它们不会被放置,而且你不会收到任何提示信息告知你操作未成功。

已知错误

偶尔会出现奇怪的碰撞问题,特别是如果你试图在不先移除书籍的情况下清空书架。此外,Skingrad地下室的书架在放置算法上存在一个已知错误——任何书架上的前几本书都会掉落,好像该书架上的碰撞模型不正确一样。这种情况可能也会出现在其他书架上——虽然我还没有全部测试过,但至少测试了六个,它们都工作得很好。


未来发布

  1. 我计划尝试修复剩下的几个错误,并添加一些更好的提示信息,告知用户书籍无法放入书架的情况。
  2. 我还计划添加锁定特定书架的功能——这意味着你可以设置脚本不再往某个书架(比如顶层书架)上放书,或者只允许放在第三层书架上。
  3. 最后,我正在研究一种方法,让你能一次性拿起所有书籍,并追踪最后一本书在书架上的位置。
  4. 目前这需要一个已知存在问题的OBSE函数(SetScript)以及“标记”书籍,但希望这不会太难实现——遗憾的是,现在判断这是否为可行方法还为时过早。

如何添加到另一个房屋模组

如果你喜欢这个并想把它添加到你的房屋模组中发布,请随意。
无需征求我的许可。
只需在某个地方注明我的贡献,让我开心就好!

  1. 使用ScripterRon的优秀工具(http://www.tessource.net/files/file.php?id=3083)将'AutoBookPlacer_Resource.esp'与您的模组合并

    使用AutoBookPlacer_Resource作为新模组的起点。

  2. 添加/替换书架。可以在"对象窗口"的"激活器"类别下找到它们,命名如下:

  • ABPshelf[类型]
  • ABPcboard[类型] 其中[Type]是所用网格的缩写。例如,MiddleBookShelf02的缩写为M02
  1. 如果你想将货架作为房屋升级的一部分——初始状态为禁用——就像原版房屋中的家具那样处理,请在脚本中查找以下代码行:
;检查是否为玩家需要购买的家具套装的一部分
;---------------------------------------------
;你的房子在这里
;---------------------------------------------
;如果 ( 位于同一单元格, ***待检查的ID*** )
;如果 ( bShelfX > 0 )
;bShelfY, bShelfZ
;将furnCheck设置为***ID_TO_CHECK_FOR***
;将contRef设置为***原始容器的ID***
;结束如果
;结束如果

Bethesda 使用了父级引用,当你购买相关家具时会启用它。
我的脚本检查是否与父级引用在同一单元,并且只有当父级引用被启用时才启用书架。
ID_TO_CHECK_FOR 替换为父级引用的 ID,它应该就能正常工作。
显然你需要取消注释这些行。

如果你在同一单元格中有多个货架,需要区分它们,可以使用bShelfX或其他坐标通过位置来区分。这些变量直接对应于参考属性窗口中的坐标。

如果你使用名为ABPcboard的激活器之一来替换橱柜,不要删除原始橱柜。而是:

  1. 将原作移出视线
  2. 打开其引用属性窗口(双击)并勾选“持久引用”
  3. 在引用属性窗口顶部有一个标记为“引用编辑器ID”的文本框。在此处输入一个唯一的名称。将名称复制到剪贴板。
  4. 关闭属性窗口,转到脚本的上述部分,将ID_OF_ORIGINAL_CONTAINER替换为你在步骤3中输入的ID。
  5. 启动模组并进行测试...