有任何上古卷轴的问题,请直接到MOD社区发帖求助

Clean up

名字:Clean up
分类:工具
需求:Oblivion 1.2.0416, OBSE
作者:kuertee
原址:Oblivion Nexus

介绍 · Description

Clean up
主要功能:

  • 通过移除游戏中不再需要的角色或者物品衍生(例:掉落的物品被玩家拾起后原衍生/引用不再需要),从而避免存档肥肿
  • 清理死了很久、可能已经损坏了的角色。

详细点的解说:

清理操作是游戏固有的用来移除不再与游戏相关联的物品的机制。

一般情况下,死去的角色以及“动态创建的”物品,如果没有被玩家拾起后,当它们所在的场景更新时这些物体便会被世界移除。
(动态物品表示那些游戏中生成的物品,区别于 Creation Set 创建的。举几个例子:由指令 PlaceAtMe 创建的,被玩家丢弃的或者死去NPC残留下来的,如盾牌等。)

然而,我们还是会遇到这些角色或者动态物品长期遗留在世界中。而且没有被游戏清除的角色将永远无法重生(刷新),这会导致坏档。
存档肥肿就是这些东西造成的,而存档肥肿可能导致游戏跳出。

几个关于存档肥肿起因的例子:

1、角色重生失败。
有些时候死去的角色会继续保留与世界的联系,以避免游戏将其实体从游戏中删除。于是他们的重生实体便无法用来重生成新角色。可惜的是,这么做会导致游戏种群数降低。
这种情况是如何造成的目前还无法确定,我自己的游戏中发现,不死生物以及部分哥布林永远都是以尸体形式待在那,然后达到一定程度后我会发现野外再也看不到骷髅怪或者僵尸。

2、玩家丢弃的物品。
这些物品将始终保留在世界中。
这种情况下它们本身并不算是损坏的实体,但是部分内容(也许是大部分内容)可能已经是“杂物”,而且玩家们已经不想要了。
例:丢弃的原料或者食物、因不再使用而被丢弃的服装。

清理过程
MOD是在后台运行的。通过扫描玩家周围死去的角色或者动态创建的物品。

任何被评估为“不再需求”的死去角色都将被禁止掉(例:actorRef.Disable)。
被禁止掉的角色在场景下一次重置时将会被游戏移除掉。

任何被评估为“杂物”并且被玩家忽略掉(例:未携带)的物品都将由另一个“专门的清洁工人”NPC拾起(例:itemRef.Activate cleanerRef, 1)。
任何被该NPC拾取的物品都将立即从世界中移除(例:cleanerRef.RemoveItem itemRef itemCount)。

也就是说,本MOD并不会移除游戏真正需要的角色或者物品,每个角色或者物品在被移除前都是经过评估的。

已死角色筛选过程
出现以下任何情况的NPC都不会被禁止掉:

  • IsEssential(皇冠角色);
  • GetTimeDead < IHoursToRespawnCell (已死时间<场景刷新时间)或者如果有时候 DS Less Predictable Respawn.esp 的话则为 GetTimeDead < DSLPR.TimerMax;
  • 拥有任务相关物品的。

记住:一般情况下,游戏本身就会在场景重置时移除掉这些角色。
只有损坏的角色才可能永远不会被游戏移除。
而本MOD便找出这些损坏的角色,并且禁止他们,从而让游戏移除。

动态物品筛选说明
位于玩家周围但是被忽略的(不再处于玩家周围的)物品将被“清洁工人”NPC移除掉。

丢弃的物品并不会立刻被该NPC清理。不过,下次玩家在靠近他们时如果不捡起来的话,它们将被定义为“被忽视的物品”,然后就会被清除。

关于动态物品的筛选下面会继续说明。

恢复丢失的物品
此操作需要 Pluggy 或者 Conscribe

1、安装 Pluggy 或者 Conscribe。

2、确保此MOD有记录物品清理日志:
如果是Pluggy的,将ini文件中的 pluggyDebug 设置为 1 。
如果是 Conscribe 的,将 ini 中的 debug 设置为 1 。

3、游戏完后,打开日志文件查看究竟有哪些文件被清理了:
Pluggy 玩家的日志保存在 我的文档/My Games/Oblivion/Pluggy/User Files/kuerteeCleanUp.txt 。
Conscribe 玩家的日志保存在 游戏安装路径/Data/Conscribe Logs/。

4、被移除的物品在日志中可以看到类似内容:

08/09/2009 00:25:43 removing Shadowhunt 00034899 at 0
                    to restore:
                    Set kCURestoreItemsQuest.itemRef[X] To GetFormFromMod "Oblivion.esm" "00034899"
                    Set kCURestoreItemsQuest.quantity[X] to 1

5、如果想恢复此物品,则复制恢复提示的内容:

                    Set kCURestoreItemsQuest.itemRef[X] To GetFormFromMod "Oblivion.esm" "00034899"
                    Set kCURestoreItemsQuest.quantity[X] to 1

6、然后把内容粘贴到文件 游戏安装路径/Data/Ini/kuerteeCleanUpRestoreItems.ini ,并且把[X]替换为 1 到 10 的数字:

                    Set kCURestoreItemsQuest.itemRef1 To GetFormFromMod "Oblivion.esm" "00034899"
                    Set kCURestoreItemsQuest.quantity1 to 1

                    Set kCURestoreItemsQuest.itemRef2 To GetFormFromMod "ZumbsLockpickingMod - OBSE.esp" "470015AB"
                    Set kCURestoreItemsQuest.quantity2 to 1

7、每次只能恢复10种物品(不过每种物品的数量不受限制)。

8、运行游戏,减号(-)键打开Clean-up控制台,选择 Restore items listed in Data\ini\kuerteeCleanUpRestoreItems.ini 。

9、物品将会恢复到玩家装备栏中。

动态物品筛选过程
提醒:游戏会在场景重置时定期清理场景内的物品。
此清理操作仅针对那些可能永久残留在游戏中的物品。
但是因为此操作也能够轻松移除那些游戏本身可以正常清理的物品,所以会顺带清理这些内容。

此筛选过程会有点复杂。
这是因为物品本身并不像角色那样存在着计数器(如获取死亡时间的函数GetTimeDead)。
所以那些被“清洁工人”NPC清除的物品只是被玩家忽略的内容。
被忽略的内容表示玩家行为上的忽略(在路边看到了但是没有捡起来)或者未看到(射在树上的弓箭),或者被当作废物扔掉的。

不过,有些东西是永远不会被清理的:

  • 任务物品;
  • 存在脚本的;
  • 当INI中设置 removeArmor=0 而物品又是盔甲的;
  • 当INI中设置 removeClothing=0 而物品又是服装的;
  • 当INI中设置 removeSoulGem=0 而物品又是灵魂石的;
  • 当INI中设置 removeWeapon=0 而物品又是武器的;
  • GetParentCellOwner == Player (场景的所有者是玩家)。

判断物品是否是被忽略的依照以下步骤:

  1. 玩家附近(距离远近由INI中的ignoreDistance决定)的20个物品将被保存到“可能被忽略”的列表中;
  2. 任何 ignoreDistance 范围之内但是未被保存的(因为已经保存20个了)将不会在本次操作中清理,而可能在下次玩家再经过时才清理;
  3. 玩家离开距离超过ignoreDistance ,20个物品中每个物品都会被“清洁工人”NPC拾起(如itemRef.Activate cleanerRef, 1)。
  4. 任何被该NPC拾取的物品马上被游戏删除(如cleanerRef.removeItem itemRef itemCount)。

就这么简单!做个总结(这个是总结1):
物品曾经在玩家周围,但是被玩家忽略了(不再处于玩家周围了)都会被“清理NPC”清理掉。

然而,有时候玩家丢弃了某些东西,并不是真的想扔掉,而是希望过段时候再过来拿。

下面是本MOD用来避免物品被清理的操作:

  1. 发现玩家的负重减少了,于是假设物品被玩家从装备栏中移除了;
  2. 玩家附近(距离远近由INI中的keepDistance决定)的20个物品将被保存到“可能需要恢复”的列表中;
  3. “可能需要恢复”列表中的物品永远不会保存到“可能被忽略”的列表中,也就永远不会被“清理NPC”移除;
  4. 但是下一次当玩家接近“可能需要恢复”列表中的物品,并且距离达到keepDistance,该物品将会从“可能需要恢复”列表中移除;
  5. 从“可能需要恢复”列表中移除的物品将会被放置到“可能被忽略”的列表中,如果玩家真的忽略了这些物品(例:没有拾起),这些物品将被“清理NPC”清理掉。

做个总结(这个是总结2):
玩家丢弃的物品并不会马上被“清理NPC”处理掉,但是如果下一次玩家接近物品距离在keepDistance以内却没有拾起的,它们将可能被清理掉。

但是因为“可能需要恢复”列表中可保存的物品数量有限制(20个),所以还有必要整理列表以补充新物品。
物品与玩家的距离超过ignoreDistance的将从列表中移除。
不过从该列表中移除的物品并不会马上被清理掉。
它们会受到等同于其他与玩家距离在ignoreDistance范围之内的物品一样的处理。
在下一次中如果判断出它们被玩家忽略了(见总结1),则清理掉。
所以,玩家可以回去拿很早以前丢弃过的物品。
仅在玩家返回后却忽略了,它们才会被清理掉。

再一次总结(其实就是总结2)
玩家丢弃的物品并不会马上被“清理NPC”处理掉,但是如果下一次玩家接近物品距离在keepDistance以内却没有拾起的,它们将可能被清理掉。

结论
本MOD含以下功能:

  • 移除损坏的角色重生对象,让游戏可以正常重新这些角色。
  • 主动清理废物以及可能永久保存在世界但是已被玩家忽略的物品。

最终效果
修复损坏的角色重新对象。

存档体积相对而言更有实际意义。文件大小将在一定微小范围内波动,而且体积变化会更频繁发生,而不是说等场景重置了才突然发生大变化。

下载 · Download

Clean-up_0p56-24606-0-56.7z

安装 · Installation

把安装内的文件解压到 Data 目录内,并使用MOD管理工具激活 kuerteeGameCleaner.esp 。

卸载 · Uninstallation

删掉之前安装的文件

不兼容 · Incompatibility

已知问题 · Known issues

有些时候,“可能需要恢复”列表中的物品在玩家返回时会被意外清理,建议把他们放置在“安全的位置上”。
提示:安全位置即 Safe Area 可以通过 Clean-up Console 添加,具体参考最上面那张图片。

致谢 · Credits

kuertee,原作者

icedream

About icedream

其实我知道的东西很少,只是翻译了一些东西,悲催的是翻译过后很快就忘了。

3 Responses to Clean up

  1. 姬神乱舞 2013 年 4 月 8 日 at 下午 7:31 #

    谢谢冰大,太详细了

    • icedream 2013 年 4 月 9 日 at 下午 1:01 #

      已知问题关于 Safe Area 最开始的说明是错的,现在更新了。

      • 姬神乱舞 2013 年 4 月 9 日 at 下午 10:41 #

        谢谢冰大,有safe area的设置方便多了,省的改所用权了