不知道什么原因这两天总是会出现这种情况,重启了电脑也没有用,最开始的时候只要在STP.launcher程序里清理临时文件就可以解决的,直到这两天老是频繁出现这种错误,求大佬帮忙看看,如果有大佬需要看完整的错误报告我可以发给你,小的在这先谢过各位大佬了
4.0.13
已配图
是
服务端报错
不知道什么原因这两天总是会出现这种情况,重启了电脑也没有用,最开始的时候只要在STP.launcher程序里清理临时文件就可以解决的,直到这两天老是频繁出现这种错误,求大佬帮忙看看,如果有大佬需要看完整的错误报告我可以发给你,小的在这先谢过各位大佬了
4.0.13
已配图
是
服务端报错
1.请所有作者在发布作品前进行第三方病毒检测,自2021年4月3日起每个新作品务必随贴附检测链接
这不仅仅是对自己负责对社区负责也是对所有用户负责,玩家也可自行检测
3.如果文中内容有侵权行为、失效下载链接以及争议的金币贴请及时举报 ➩点击下方举报
4.注册用户在发布作品、话题、评论等内容时,请务必遵守国家互联网信息管理办法规定
5.本站所收录的作品、评论、上传内容等均属用户个人行为,如侵害了您的权益,欢迎举报,一经核实,立即删除
请登录之后再进行评论
我在看报错的时候发现了一段这样的‘计划中事件:“SPTarkov.Server.Core.Callbacks.SaveCallbacks”运行失败。’这又是因为啥
问了AI,给了这样的回复
这个错误的核心在于 JSON 序列化时遇到了无法处理的特殊浮点数值(如正无穷、负无穷或 NaN)。
根据你提供的错误日志,这是在使用 C# 的
System.Text.Json进行序列化时发生的典型问题。以下是详细的分析和解决方案:1. 错误原因分析
核心冲突:.NET 中的
double或float类型支持 PositiveInfinity(正无穷)、NegativeInfinity(负无穷)和 NaN(非数字)。然而,标准的 JSON 规范(RFC 8259)不支持这些特殊值,它只接受标准的有限数字。触发场景:在你的代码(涉及
SPTarkov服务器逻辑,特别是QuestCallbacks.ActivityPeriods)中,某个对象的属性值被计算或赋值为了double.PositiveInfinity、double.NegativeInfinity或double.NaN。当System.Text.Json尝试将该对象转换为 JSON 字符串时,由于无法将这些值写入 JSON,抛出了ArgumentException。2. 解决方案
要解决这个问题,通常有以下几种方法,建议根据你的具体代码结构选择:
方案 A:配置序列化选项(推荐,如果可以修改序列化设置)
如果你能控制
JsonSerializerOptions,可以添加一个属性级的处理程序,允许将这些特殊值序列化为 JSON 中的特定字符串(如"Infinity","-Infinity","NaN")。在你的序列化配置中(例如在
JsonUtil或相关初始化代码中),添加以下设置:using System.Text.Json; using System.Text.Json.Serialization; var options = new JsonSerializerOptions { // 其他设置... }; // 假设你要序列化的类型是 MyClass,且包含一个 double 属性 MyValue // 你需要为包含这些特殊值的属性或类型添加处理程序 options.Converters.Add(new JsonNumberHandler(JsonNumberHandling.AllowNamedFloatingPointLiterals));注意:
JsonNumberHandling.AllowNamedFloatingPointLiterals是 .NET 5 及以上版本提供的功能,它允许序列化器将NaN、Infinity等写为 JSON 字符串。但是,这需要你的客户端(解析 JSON 的一方)也能理解这些字符串并将其反序列化回对应的 .NET 值,否则可能会导致客户端解析错误。方案 B:数据预处理(最稳妥)
在将数据传递给序列化器之前,检查并替换掉这些非法值。通常将它们替换为
null或一个特定的“哨兵值”(如0或-1),具体取决于业务逻辑。在你的
ActivityPeriods或相关数据生成逻辑中,找到可能产生无穷大或 NaN 的计算,并进行修正:// 示例:在设置属性值时进行检查 double value = CalculateSomeValue(); // 这个计算可能返回 Infinity 或 NaN // 修正逻辑 if (double.IsInfinity(value) || double.IsNaN(value)) { value = 0; // 或者 null (如果属性是 double?) } // 然后赋值给对象进行序列化 myObject.MyProperty = value;方案 C:自定义转换器
如果上述方案不适用,你可以编写一个自定义的
JsonConverter,专门处理包含这些特殊值的类型,在序列化时将其转换为 JSON 支持的格式(例如对象{"type": "infinity", "sign": "positive"}或简单的数字0)。3. 针对 SPTarkov 的具体建议
根据堆栈跟踪,错误发生在
SPTarkov.Server.Core.Utils.JsonUtil.Serialize。建议你检查以下位置:检查 Quest 数据:查看与
ActivityPeriods相关的任务(Quest)配置数据。是否有某个任务的时间、概率或数值被错误地设置为了0(导致除以零错误产生无穷大)或者未定义的值?检查
JsonUtil类:查看JsonUtil.Serialize方法的实现。它是否使用了默认的JsonSerializerOptions?如果是,尝试修改该方法,引入允许特殊浮点数的选项,或者在序列化前对输入对象进行清洗。总结:根本原因是数据中包含了 JSON 不支持的特殊浮点数。最直接的修复方式是在业务逻辑层确保不会生成
Infinity或NaN,或者升级序列化配置以兼容这些值。我看到你报错里有at system Text.json ,我猜你用了MGMod,删掉应该就好了,如果没用Mg那我也不知道了
我就下载了三个模组我也不知道是哪个的问题了