传奇服务端is not a valid date and time报错原因与修复教程

来源: 作者: 点击:
M2或控制器弹出is not a valid date and time,意思是程序把某段文本当成日期时间解析但格式不对、内容为空或值不存在。老引擎尤其是HERO、部分3K用Delphi/BDE写时间转换,对Windows区域格式、!Setup.txt时间戳、脚本变量、DBC或MySQL日期字段都很敏感。按下面顺序查,基本都能定位。

一、先看报错完整上下文

不要只盯英文提示,记录三件事:
1. 弹窗来自M2Server、DBServer、登录器还是某个NPC/活动脚本。M2启动阶段弹,优先系统格式和!Setup.txt;进游戏点NPC弹,优先脚本变量;读角色/账号弹,优先数据库。
2. 报错前面有没有具体行,例如2020-11-4 22:08:17 is not a valid date and time,说明引擎读到了这个字符串但当前系统解析规则不认。带空格的横杠格式一般没问题,问题多在系统短日期用了yyyy/M/d、d/M/yyyy或中文年月日。
3. 是换了系统、换了引擎、恢复了备份后第一次启动,还是运行几天突然报。换环境多是区域格式,突然报多是某条配置被脚本写入了脏时间,或者数据库某行时间被改坏。

二、改Windows区域短日期和长时间

老M2读系统时间走区域格式,短日期不对最容易整体报。操作:
控制面板、区域和语言、更改日期时间或数字格式,短日期设yyyy-M-d或yyyy-MM-dd;长时间设HH:mm:ss,24小时制;长日期可设yyyy年M月d日,但短日期别用中文年月日。Win10/11也可右键任务栏时间、调整日期和时间、语言和区域、区域、其他日期格式里改。改完确定,重启电脑再起M2,很多HERO报Date错误直接消失。
注意别设成d/M/yyyy或M.d.yyyy,老引擎容易把1/2/2026理解成2月1日或解析失败。服务器若用非中文区域,建议格式切到中文中国,或至少短日期保持年-月-日。

三、清!Setup.txt里非法时间参数

进服务端Mir200,记事本打开!Setup.txt,搜索下面几类:
DayOfGuildFountain=
OpenDate=、StartDate=、EndDate=、各种带Date、Time、Day、Hour的活动参数
若某行等号后是2020-11-4 22:08:17这种单数字月份日期,老引擎有时不认;按系统改完区域后仍报,就把可疑时间值清空,只保留参数名等于空,例如DayOfGuildFountain=,让M2重读系统时间生成。若必须保留,写完整2020-11-04 22:08:17,年月日四位、中间空格、时分秒两位。
保存后用Notepad++确认文件不是带BOM的UTF-8,老引擎读ANSI更稳。改完别只点M2重启,把DBServer、LoginSrv、M2、网关全部关掉再起。

四、查Envir脚本里的时间写法

进Mir200\Envir,重点看QFunction.txt、QManage.txt、Robot.txt、MapInfo.txt、活动目录和自定义任务脚本。报错在点某个NPC、领奖励、做限时任务时出现,基本是脚本时间变量问题。
常见错误:
1. 写2026年9月15日、9/15/2026这种中文或美式日期,引擎时间函数不认,统一改2026-09-15 00:00:00。
2. 变量取上次登录时间、封禁时间、活动结束时间,变量为空就拿去转日期,例如STR空串直接StrToDateTime,必然报无效。脚本里先判断变量非空再转,空则给当前时间默认值。
3. 月份00、13,日期00、32,小时24以上,分钟60以上,例如2026-13-01 25:00:00都属于非法日期,人工改配置或脚本常量时会写错。
4. GOM/GEE类如果用了FormatDateTime、StrToDateTime类插件命令,传入文本必须严格标准;第三方插件老版本对yyyy-MM-dd和yyyy/MM/dd混用会出问题,统一一种分隔符。
全局搜索年、月、日、/、单数字日期、0000-00-00,逐条改标准格式再重启M2测试。

五、DBC2000和HeroDB日期字段

用DBC的端,控制面板开BDE Administrator,确认HeroDB别名PATH指向Mir200\Mud2\DB或端说明里的DB目录。展开表看账号表、角色表、行会表里RegDate、LastLoginDate、CreateDate、到期时间等字段。
处理:
1. 有0000-00-00、00000000、2026/13/01、空白但字段要求日期的,改成合法值,例如2026-01-01或当前日期。
2. DBC表里日期显示若系统区域是斜杠,引擎期望横杠,优先把系统短日期改横杠后再开BDE;直接手改表里格式要保持和系统可解析一致。
3. 表打不开或报BDE错误,先核对别名PATH,别只改时间;PATH错会导致整体载入异常,间接出现时间相关弹窗。
4. 数据库目录如果从别处复制来,优先用同版本原始DB替换账号角色以外的基础表,再导入自有数据,避免老表结构写脏时间。

六、MySQL或Web后端日期字段

部分新引擎、手游版、第三方后台用MySQL。报无效日期时查对应库角色表、账号表、日志表、活动表:
1. 字段类型用DATE、DATETIME、TIMESTAMP,DATETIME标准值2026-09-15 12:00:00;若表里存2026/09/15、2026.09.15、空串、0000-00-00 00:00:00,程序转换会失败。
2. 查脏数据示例思路:挑时间列看是否含斜杠、点号、全零、空值;能修正就统一成横杠标准,空值按业务给默认当前时间或NULL取决于程序是否允许。
3. 时区问题:服务端在云主机或国外镜像,MySQL时区不是东八会让人觉得时间错。查看时区变量,需要东八就设会话和全局为+08:00并刷权限;系统Windows时区同样设UTC+8北京。
4. 程序读库后自己做字符串转时间,库里标准了但仍报,检查代码或插件传入格式,不要库标准、代码又拼成d/M/yyyy。

七、角色存档和人物流水脏文件

M2读人物进入、读取封停到期、读取充值/点卡/沙城时间报错,除了数据库还要看:
1. Mir200\Envir\Castle、 Guild、UserData相关文本存档里时间行是否被人手改坏。
2. 行会文件、沙城配置文件、排行榜文件里的上次攻城、维护时间,若写成空或中文,启动相关模块会弹无效日期。
3. 备份恢复后时间字段来自旧系统,短日期格式不同,先改系统区域再加载备份;仍不行把可疑时间参数清空让M2重写。

八、插件、热更和第三方模块

装了登录后台、活动插件、充值插件、反作弊模块,启动或触发功能报is not a valid date and time,看M2插件加载日志。临时把非核心插件目录移走或改禁用,纯净启动M2;不报了再逐个加回,定位到具体插件后换同引擎兼容版本。插件配置里时间若要求yyyy-MM-dd HH:mm:ss,不要写yyyy年MM月dd日,也不要用系统区域短日期那种斜杠。

九、快速按现象套用

M2一启动就弹、还没进游戏:改系统短日期yyyy-MM-dd,清!Setup.txt的DayOfGuildFountain等时间值,重启电脑再起。
换系统后HERO弹具体时间字符串:系统区域改横杠短日期,配置文件时间补四位年月日两位时分秒。
点NPC或领限时奖励弹:查QFunction/QManage/活动脚本,变量空值先赋值,日期统一2026-09-15 12:00:00。
读账号角色弹:DBC查HeroDB日期字段,MySQL查DATETIME脏值和时区。
恢复备份后弹:先改区域格式,再用同版本空库结构导入数据,避免旧时间格式冲突。
换引擎后弹:不要只拷LonServer/LoginSrv之类,按新引擎重跑配置向导,时间参数让新M2自己生成,不手工从旧!Setup.txt搬日期行。

十、改完验证顺序

关全部M2、DB、登录、网关;系统区域应用并重启;打开!Setup.txt把可疑时间清空或写标准值;DBC确认HeroDB路径,MySQL确认表和时区;Envir脚本全局搜非标准日期并替换;以管理员起DBServer,看成功后再起LoginSrv,再起M2,最后起网关。M2窗口若显示时间配置加载正常、无valid date提示,进游戏触发原来报错的NPC或活动,连续试多次;还报就把M2日志里完整报错行、涉及脚本文件名和行号拿出来,只改对应那一行时间格式,不要全量重装。