Valheim社区补丁

Valheim社区补丁

这是一个错误修复和性能改进的集合。它不会改变游戏玩法,可以安装在客户端和/或服务器上。

[center][size=6][b]Valheim Community Patch[/b][/size]
[size=4]原版漏洞修复与性能修复。[b]不改变游戏玩法。[/b][/size][/center]

[line]

本模组的存在是为了修复 Valheim 本身已损坏或异常缓慢的问题——崩溃、会悄然拖垮系统的异常、物品丢失、平方级复杂度的热路径、逐帧分配、日志刷屏。它刻意不包含任何便利性功能、平衡性调整或内容,因此你可以直接将其安装到服务器上,而无需任何人就游戏应该如何运行达成一致。

性能修复始终启用;配置中仅保存它们的调优数值以及仅限管理员的 Verify 诊断项。正确性与地形修复各自拥有独立的开关。配置数值仅限管理员且由服务器同步。

每个修复都标注了值得安装的一侧。[i](服务器)[/i]修复只在托管世界的机器上生效——即专用服务器或监听主机。[i](客户端)[/i]修复需要本地玩家,且在专用服务器上[b]根本不会应用[/b],这就是为什么那里的启动日志会报告一个更小的数量。[i](双方)[/i]修复在安装的任何位置都能生效。单侧安装是安全的;只是你只能获得其中一部分。请参见下面的安装部分。

[size=4][b]为什么这么多修复是客户端侧的[/b][/size]

Valheim 专用服务器并不是模拟主机。它只在其[i]自身[/i]的活动区域内创建游戏对象,而无头服务器永远没有玩家来锚定该区域,因此该区域在整个运行期间都停留在世界原点。生物、火焰、箱子、焦油坑以及其他玩家附近的一切都在该玩家的客户端上创建、拥有和模拟;服务器持有数据并进行转发。

因此,服务器能从中获益的修复是数据与网络相关的修复——ZDO 处理、世界加载、数据包分配、套接字日志——而几乎其他所有修复都值得在客户端上使用。

[line]

[size=5][b]性能对比[/b][/size]

[center][youtube]UrSF0NYgFpo[/youtube][/center]

[line]

[size=5][b]地形修复对比[/b][/size]

[b]地形撕裂(原版)[/b]
[img]https://github.com/MidnightsFX/Valheim-Community-Patch/blob/master/Media/Terrain_Tears.png?raw=true[/img]

[b]地形修复后[/b]
[img]https://github.com/MidnightsFX/Valheim-Community-Patch/blob/master/Media/Terrain_Fixed.png?raw=true[/img]

[line]

[size=5][b]本版本中的修复[/b][/size]

如果某个修复来源于或其他模组作者的成果,或与之相互印证,都会在下面的“致谢与来源”部分中逐项记录。

[size=4][b]性能[/b][/size]

[list]
[][b]Fix Portal Connection Scan[/b] [i](服务器)[/i]——通过标签索引配对传送门,而不是每五秒为每个未连接的传送门重新扫描一遍所有传送门。[/]
[][b]Fix World Load Connection Scan[/b] [i](服务器)[/i]——用索引将传送门、生成器和同步变换与其目标在世界加载时配对,而不是比较每一对。[/]
[][b]Fix Disconnect ZDO Sweep[/b] [i](服务器)[/i]——按所有者索引非持久对象,因此断开连接时只清理离开玩家的对象,而不是世界中的每一个 ZDO。[/]
[][b]Fix Tar Pit Buffer Disposal[/b] [i](客户端)[/i]——只在焦油坑射线检测缓冲区已分配时才释放它们,这样加载失败的焦油坑就不会在场景销毁时抛出异常。[/]
[][b]Fix ZDO Packet Allocation[/b] [i](双方)[/i]——直接将一个网络包从其缓冲区写入另一个网络包,而不是先把整个负载复制到堆上。[/]
[][b]Fix Mist Query Overhead[/b] [i](客户端)[/i]——从按区域分桶的快照和高度图数据来回答雾体积查询,而不是为每个粒子扫描每一个雾体积并执行本机读取和物理射线。[/]
[][b]Fix Heightmap Lookup Scan[/b] [i](双方)[/i]——通过按区域键控的查找来找到某点下方的地形瓦片,而不是扫描每一个已加载的瓦片。[/]
[][b]Fix Static Object Ground Checks[/b] [i](双方)[/i]——每次地面检查只读取一次树或岩石的位置,而不是约六次。[/]
[][b]Fix Grass Rebuild Burst[/b] [i](客户端)[/i]——将整个区域的草重建分散到几帧内完成,优先处理最近的区块,而不是在一帧内重新生成每一个区块。[/]
[][b]Fix Terrain Builder Throughput[/b] [i](双方)[/i]——让地形构建线程仅在空闲时休眠,并保留更多已完成的结果。[/]
[][b]Fix Zone Collider Stall[/b] [i](客户端)[/i]——在后台线程而非主线程上烘焙已生成区域的地形碰撞体。[/]
[][b]Fix Prefab Query Scan[/b] [i](双方)[/i]——通过索引来回答“此预制件的所有对象”,而不是扫描世界中的每一个 ZDO。[/]
[][b]Fix Grass Ground Raycasts[/b] [i](客户端)[/i]——从地形数据读取地面高度、坡度和生物群系用于草的放置,而不是为每一片草叶投射物理射线。[/]
[][b]Fix Background Zone Pacing[/b] [i](服务器)[/i]——当上一帧运行时间过长或上一次生成开销很大时,将后台区域预生成推迟一个 tick(两者均可配置)。[/]
[][b]Fix Water Material Lookup[/b] [i](客户端)[/i]——缓存每个水瓦片的表面材质,而不是每帧从引擎获取。[/]
[][b]Fix Distant Terrain Hitch[/b] [i](客户端)[/i]——每帧重建远景地形环的几个瓦片(可配置;原版为 9),而不是一次性重建全部九个。[/]
[][b]Fix Idle Scene Sweep[/b] [i](双方)[/i]——当低成本的变化跟踪证明没有任何变化时,跳过 30 Hz 的对象创建/销毁遍历,同时保留每秒一次完整遍历作为安全扫描。[/]
[][b]Fix Support Lookup Cost[/b] [i](双方)[/i]——通过查找表解析某个碰撞体属于哪个建筑部件,而不是为每个碰撞体遍历一次层级结构。[/]
[][b]Fix Light Flicker Overhead[/b] [i](客户端)[/i]——当光照超过可配置距离且超过其自身的光照 LOD 距离时,停止更新火把闪烁。[/]
[][b]Fix Piece Event Stall[/b] [i](双方)[/i]——在按高度图键控的表中注册建筑部件以清除地形重建缓存,而不是使用那种订阅会复制、取消订阅会扫描整个列表的事件。[/]
[][b]Fix Unload Sweep Cost[/b] [i](双方)[/i]——以可配置的挂钟时间间隔(默认 100 毫秒)运行对象卸载遍历,而不是在每次遍历时都运行。[/]
[][b]Fix Spawn Queue Churn[/b] [i](双方)[/i]——在帧之间保留已排序的生成积压队列,而不是每秒重建并重新排序三十次。[/]
[][b]Fix Zone Occupancy Scan[/b] [i](双方)[/i]——通过按区域的计数来回答某个区域是否仍持有对象,而不是遍历每一个已加载对象。[/]
[][b]Fix Piece Material Polling[/b] [i](双方)[/i]——在一个共享计时器上等待部件的随机材质种子,并在数值应用后停止轮询。[/]
[][b]Fix Idle Support Checks[/b] [i](双方)[/i]——让建筑部件跳过其结构支撑重新检查,直到相邻部件被建造、摧毁或更改,或地形被编辑;“Support Change Threshold”和“Settled Piece Patience”用于调整相邻部件的微小漂移何时唤醒它。[/]
[][b]Fix Smoke Overhead[/b] [i](客户端)[/i]——以 2% 生命周期步长写入每个烟雾团的物理质量,每秒重新检查其渲染区块四次,并每帧读取其位置一次。[/]
[][b]Fix Unload Discovery Scan[/b] [i](双方)[/i]——通过按区域的实例索引来发现离开已加载区域的对象,而不是遍历每一个已加载对象;“Object Unload Frame Budget”限制每次遍历交给引擎的数量(默认 250,0 为原版)。[/]
[][b]Fix Idle Wear Visits[/b] [i](双方)[/i]——当建筑部件可证明处于安静状态时跳过其整个磨损访问:支撑已休眠、本地拥有、干燥或有屋顶而潮湿、位于水位线以上、在 Ashlands 之外,且自上次访问以来未受损。[/]
[][b]Fix ZDO Value Write Allocation[/b] [i](双方)[/i]——比较 ZDO 字段写入与其存储值时不对其进行装箱。[/]
[][b]Fix Doubled ZDO Lookups[/b] [i](双方)[/i]——通过一次字典查找而非两次来读取 ZDO 数据。[/]
[][b]Fix Collision Contact Allocation[/b] [i](双方)[/i]——将碰撞的接触点读取到可复用的缓冲区中,而不是为每次碰撞回调分配一个数组。[/]
[][b]Fix Collision Callback Allocation[/b] [i](双方)[/i]——启用 Unity 的 [font=Courier New]reuseCollisionCallbacks[/font],使一个碰撞对象服务于每一次回调;如果某个触碰物理且存储碰撞对象的模组行为异常,这是首个怀疑对象。[/]
[][b]Fix Equipment Visual Refresh[/b] [i](客户端)[/i]——仅在输入发生变化时才重新应用角色的皮肤和头发颜色,并通过一次表查找而非三十次来读取其装备字段。[/]
[][b]Fix Light Settings Subscription[/b] [i](客户端)[/i]——在查找表中注册光照以响应图形设置变化,而不是使用那种取消订阅会扫描所有其他已点亮光照的静态事件。[/]
[][b]Fix Portal Idle Updates[/b] [i](客户端)[/i]——一旦连接淡入淡出完成,就停止传送门每帧重写其发光颜色、光照和音频。[/]
[][b]Fix Material Fader Settling[/b] [i](客户端)[/i]——停止已完成的淡入淡出每帧向每个渲染器重新应用相同的材质属性块;滞留的尸体是常见情况。[/]
[][b]Fix Cooking Slot Keys[/b] [i](双方)[/i]——通过预计算的键哈希来读写烹饪站的槽位数据,而不是每次访问构建六个字符串,正如 [font=Courier New]ArmorStand[/font] 已经做的那样。[/]
[][b]Fix Station Range Scans[/b] [i](客户端)[/i]——用平方距离和每个候选一次位置读取来回答每帧的建造模式工作站和扩展范围查询,而不是两次。[/]
[][b]Fix Smelter Catch-up Reads[/b] [i](双方)[/i]——根据数据修订版记忆化熔炉的燃料和矿石读取,这样一小时错过的生产不会每个模拟秒都重新读取一次。[/]
[][b]Fix Idle Sound Updates[/b] [i](客户端)[/i]——将已完成的单次音效从逐帧音频更新器列表中移除,直到有东西再次播放它。[/]
[/list]
[size=4][b]地形[/b][/size]

[b]Fix Terrain Seams[/b] 和 [b]Fix Terrain Paint Seams[/b] 只更改绘制的内容,从不更改保存的内容,因此它们仅限客户端。[b]Fix Terrain Paint Zone Fanout[/b] 更改记录的内容,因此它在每一侧都运行。

[list]
[][b]Fix Terrain Seams[/b] [i](客户端)[/i]——跨区域边界计算地形光照法线,消除沿 64 米网格的硬折痕。[/]
[][b]Fix Terrain Paint Seams[/b] [i](客户端)[/i]——合并区域边界上绘制的两份副本,使泥土跨过边界继续,而不是戛然而止;边界上孤立的条纹会被丢弃。[/]
[][b]Fix Terrain Paint Zone Fanout[/b] [i](双方)[/i]——将地形绘制记录到它实际覆盖的每个区域,包括原版遗漏的向西或向南约一米的相邻区域;影响从今往后的编辑。[/]
[][b]Fix Terrain Paint Mask Indexing[/b] [i](客户端)[/i]——修正 [font=Courier New]optterrain[/font] 控制台命令用于遍历地形绘制数据的步幅和边界。[/]
[][b]Fix Terrain Compiler Init Race[/b] [i](双方)[/i]——恢复在其高度图存在之前就已加载的区域地形编译器,而不是每帧抛出异常并忽略编辑。[/]
[/list]
[size=4][b]正确性[/b][/size]

[list]
[][b]Fix Object Unload Crash[/b] [i](双方)[/i]——在对象卸载期间从孤立的场景实例中恢复,而不是每帧中止遍历。[/]
[][b]Tolerate Duplicate ZDOs On Load[/b] [i](服务器)[/i]——加载包含重复 ZDO id 的存档时,保留较晚的一个并记录警告,而不是拒绝加载。[/]
[][b]Fix Effect Areas[/b] [i](双方)[/i]——当火焰温暖和潮湿检查背后固定的 128 碰撞体缓冲区填满时扩展它,并从效果区域中移除已销毁的角色,而不是每个物理步骤都抛出异常。[/]
[][b]Fix Fuel And Ore Loss[/b] [i](客户端)[/i]——在添加燃料或矿石之前取得熔炉、窑或壁炉的所有权,这样物品就不会因网络消息丢失而丢失。[/]
[][b]Refund Rejected Station Items[/b] [i](双方)[/i]——当熔炉、窑、壁炉、烹饪站或发酵桶在物品离开玩家物品栏后因工作站更换所有者或已满而在到达时将其丢弃时,将物品退回给玩家;涵盖原版发送者和“最后一个槽位”竞态。[/]
[][b]Share Boss Defeat Keys[/b] [i](客户端)[/i]——将每个玩家的 Boss 击败键给予附近的所有玩家,而不仅仅是其客户端拥有该 Boss 的那一个;对原版服务器也有效。[/]
[][b]Fix Recipe Amount Crash[/b] [i](客户端)[/i]——防护空引用解引用,该问题会在携带零个原料时破坏“需要以下任意一种”配方的制作面板。[/]
[][b]Fix Spawner Null Prefabs[/b] [i](双方)[/i]——在加载时从生成器的生物表中丢弃空条目,而不是让一个空条目毁掉整个生成器。[/]
[][b]Fix Projectile Rotation Spam[/b] [i](双方)[/i]——停止速度为零的投射物每个物理步骤都写入 [font=Courier New]Look rotation viewing vector is zero[/font] 日志行。[/]
[][b]Fix Send Failure Log Spam[/b] [i](双方)[/i]——将逐帧的 [font=Courier New]Failed to send data[/font] 日志行重定向到调试日志。[/]
[][b]Fix Container Log Spam[/b] [i](双方)[/i]——将每次打开箱子、全部堆叠和全部取走时写入的四行日志重定向到调试日志。[/]
[][b]Fix Item Icon Crash[/b] [i](客户端)[/i]——为存储的图标变体超出范围的物品绘制第一个图标,而不是从每个 UI 面板抛出异常。[/]
[][b]Fix Negative Stamina[/b] [i](客户端)[/i]——将玩家耐力下限设为零(包括 [font=Courier New]NaN[/font]),修复加载时已损坏的角色,并丢弃携带 [font=Courier New]NaN[/font] 或无穷大的 [font=Courier New]UseStamina[/font] 网络消息。[/]
[][b]Fix Dungeon Load Stall[/b] [i](双方)[/i]——将资源加载失败的地牢房间计为已完成并丢弃它,这样该区域就不会永远被标记为正在加载。[/]
[][b]Fix Teleport Ghost Players[/b] [i](服务器)[/i]——告诉客户端丢弃一个已传送出其加载区域的玩家,而不是让他们僵立在离开的位置(并且仍处于本地聊天范围内)。[/]
[][b]Fix Unsaved Client Changes[/b] [i](服务器)[/i]——将已连接玩家放置或更改的对象标记为下次世界保存时保存;分块保存格式只重写游戏标记为已更改的块,而它从不标记来自其他玩家的更改。[/]
[][b]Fix Water Colour Seams[/b] [i](客户端)[/i]——根据每个水瓦片上混合的深度来着色,正如其波浪已经做的那样,而不是根据一个角,消除沿 64 米网格的硬颜色线。[font=Courier New]Water Colour Depth Scale[/font](默认 2)设置着色多快到达深水;高于 1 时,它还会使浅水波浪看起来比船只所乘的波浪更高。[/]
[][b]Fix Non-Item ObjectDB Entries[/b] [i](双方)[/i]——在加载时从游戏物品列表中丢弃非物品的预制件;2026-09-09 更新列出了三个([font=Courier New]PropFeastDeepNorth[/font]、[font=Courier New]SnowRoller[/font]、[font=Courier New]FrozenKing_Summon[/font]),它们会破坏将所有条目都视为物品的模组。它们仍然可以被生成。[/]
[/list]
两个日志修复是重定向而非删除:开启 [font=Courier New]EnableDebugMode[/font],消息就会回来。

[line]

[size=5][b]致谢与来源[/b][/size]

本模组修复的是原版缺陷,而其他模组作者首先发现——在某些情况下已经修复——了其中相当一部分。凡属这种情况,都会记录在下面,以及补丁文件顶部的注释中。

涉及的模组:

[list]
[][b][url=https://github.com/redseiko/ComfyMods]ComfyMods[/url][/b]——redseiko(GPL-3.0),与本项目相同的许可证。其七个模组——BetterZeeLog、LetMePlay、BetterServerPortals、Scenic、Compress、Effectual 和 Atlas——贡献了下面十一个条目。[/]
[][b][url=https://github.com/ontrigger/ValheimPerformanceOptimizations]ValheimPerformanceOptimizations[/url][/b]——ontrigger(MIT)。对下面某个性能条目的独立印证。[/]
[][b][url=https://github.com/AzumattDev/MyPitsDontLeak]MyPitsDontLeak[/url][/b]——Azumatt(MIT)。[/]
[][b]Zen.ModLib[/b]——ZenDragon。用作参考;未使用任何代码。[/]
[][b]Iron Gate Studio[/b]——Valheim 本身。反编译的游戏源码是用于定位缺陷的参考;未重新分发任何游戏代码。[/]
[/list]
[size=4][b]性能[/b][/size]

[list]
[][b]Fix Portal Connection Scan[/b]——ComfyMods,BetterServerPortals:索引算法。[/]
[][b]Fix World Load Connection Scan[/b]——ComfyMods,Atlas:其 [font=Courier New]ConnectSpawners[/font] 方法,此处扩展到了传送门和同步变换。[/]
[][b]Fix Tar Pit Buffer Disposal[/b]——MyPitsDontLeak,Azumatt:根本原因;我们的实现是 transpiler 而非整体方法替换。[/]
[][b]Fix ZDO Packet Allocation[/b]——ComfyMods,Compress:该技术,单独采用,未使用该模组的 GZip 协议更改。[/]
[][b]Fix Support Lookup Cost[/b]——MidnightsFX,由 ontrigger 的 ValheimPerformanceOptimizations(MIT)印证:得出了相同的映射探测和惰性默认形式,以及单次获取质心。[/]
[][b]Fix Cooking Slot Keys[/b]——Iron Gate Studio:键哈希模式,取自 [font=Courier New]ArmorStand.InitKeys[/font]。[/]
[]其他所有性能修复——MidnightsFX。[/]
[/list]
[size=4][b]地形[/b][/size]

[list]
[]全部五个地形修复——MidnightsFX。[/]
[/list]
[size=4][b]正确性[/b][/size]

[list]
[][b]Fix Object Unload Crash[/b]——ComfyMods,Scenic:该方法。[/]
[][b]Tolerate Duplicate ZDOs On Load[/b]——ComfyMods,Atlas:重复 id 容错。[/]
[][b]Fix Effect Areas[/b]——ComfyMods,Effectual:两个缺陷;我们对悬空引用的修复不同。[/]
[][b]Fix Fuel And Ore Loss[/b]——Zen.ModLib(目录):根本原因;重写为前缀。[/]
[][b]Share Boss Defeat Keys[/b]——Zen.ModLib(目录):缺陷和方法;用一个全局注册的 RPC 重写。[/]
[][b]Fix Recipe Amount Crash[/b]——Zen.ModLib(目录):缺陷,已重写。[/]
[][b]Fix Spawner Null Prefabs[/b]——ComfyMods,LetMePlay:相同的修复。[/]
[][b]Fix Projectile Rotation Spam[/b]——ComfyMods,BetterZeeLog:相同的修复。[/]
[][b]Fix Send Failure Log Spam[/b]——ComfyMods,BetterZeeLog:缺陷;该模组移除调用,此模组重定向它。[/]
[][b]Fix Container Log Spam[/b]——ComfyMods,BetterZeeLog:缺陷;该模组移除调用,此模组重定向它们。[/]
[][b]Fix Item Icon Crash[/b]——ComfyMods,LetMePlay:缺陷;此处为较小的修复,不触碰共享的物品数据。[/]
[][b]Fix Negative Stamina[/b]、[b]Fix Dungeon Load Stall[/b]、[b]Fix Teleport Ghost Players[/b]、[b]Fix Unsaved Client Changes[/b]、[b]Fix Water Colour Seams[/b] 和 [b]Fix Non-Item ObjectDB Entries[/b]——MidnightsFX。[/]
[/list]
[line]

[size=5][b]安装[/b][/size]

使用模组管理器安装,或将 [font=Courier New]ValheimCommunityPatch.dll[/font] 放入 [font=Courier New]BepInEx/plugins[/font]。

需要 [url=https://valheim.thunderstore.io/package/denikson/BepInExPack_Valheim/]BepInEx[/url] 和 [url=https://valheim.thunderstore.io/package/ValheimModding/Jotunn/]Jotunn[/url]。

[b]将其安装在服务器和每个客户端上以获得全部功能。[/b]并非必须在两端都安装:安装了模组的客户端可以加入原版服务器,安装了模组的服务器也接受原版客户端。本模组不添加任何物品、预制件、配方或存档数据,因此它所接触过的世界仍可在原版中加载,而它发送的唯一一条网络消息会被任何未安装它的人忽略。

单侧安装能得到什么:

[list]
[][b]仅服务器[/b]——每个 [i](服务器)[/i] 和 [i](双方)[/i] 修复。[i](客户端)[/i] 修复根本不会被应用:专用服务器没有本地玩家,因此那里的任何东西都无法触及它们。启动日志会准确说明你获得了哪些数量。[/]
[][b]仅客户端[/b]——每个 [i](客户端)[/i] 和 [i](双方)[/i] 修复,专门为你生效。[i](服务器)[/i] 修复已安装但除非你是托管者,否则无效。[/]
[/list]
混合群体有两个注意事项:

[list]
[]配置数值只会从服务器同步到安装了该模组的客户端——单侧安装时,每台机器使用自己的配置文件。[/]
[]有若干修复是通过重写方法而非包装方法来应用的,这些修复在游戏启动时读取一次配置。它们的描述中会说明这一点。更改其中之一——包括服务器在会话中途同步下来的数值——在该机器重启之前不会生效。[/]
[/list]
如果服务器和客户端都安装了该模组,它们的版本必须在主版本号和次版本号上匹配;否则 Jotunn 会拒绝连接,而不是让双方对行为产生分歧。

如果某台机器确实以无头模式运行但仍应获得客户端修复,请在配置中设置 [font=Courier New]Patch Every Side[/font] 并重启。这是最后的手段——它的存在是为了防止识别专用服务器的图形设备检查万一出错。

[line]

[size=5][b]与其他模组一起运行[/b][/size]

此处的若干修复是通过重写原版方法内部的指令而非包装方法来应用的,而其他模组有时会重写相同的方法。本模组的所有重写都刻意安排在其他所有模组[b]之后[/b]运行,且每一个都会检查是否找到了预期的内容,如果没有,就保留方法不动。因此,如果另一个模组已经修复了相同的缺陷,那个模组的版本会胜出,而本模组会退让,而不是与之对抗。

发生这种情况时,你会在日志中看到类似 [i]“found no ZLog.Log calls to redirect, so this fix is inactive”[/i] 的行。这是机制在正常工作,而不是失败。真正的失败看起来不同——启动行上会显示 [font=Courier New]fix(es) failed[/font],并在其上方显示异常。

已知重叠:[b]ComfyMods BetterZeeLog[/b] 修复了三个相同的缺陷(容器请求日志、“Failed to send data”以及投射物零速度旋转警告)。两者可以安全地一起运行,且 BetterZeeLog 对这三个的版本会生效。

[line]

[size=5][b]报告问题[/b][/size]

问题请提交至 [url=https://github.com/MidnightsFX/Valheim-Community-Patch]GitHub[/url]。请附上你的 [font=Courier New]LogOutput.log[/font] 以及你正在运行的其他模组列表。

[line]

[size=5][b]贡献修复[/b][/size]

要决定某个修复是否属于这里,测试标准是:

[list]
[]它是否修复了游戏本身的缺陷?[/]
[]它是否解决了严重的性能问题(例如 2-5 倍减速)?[/]
[/list]
如果不符合这些标准,将不会被接受。本模组纯粹是漏洞与性能修复。