当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇世界单机换彩虹引擎报nosuchtableStdItems

热度:
这个报错不是你电脑问题,也不是彩虹引擎本身炸了,而是你把一个AFT引擎用的数据/脚本环境,直接拿到彩虹引擎上跑,数据库表结构对不上。
报错里已经写得很直白:

nosuchtable:StdItems
select*fromStdItemsorderbyidx


意思是:服务端启动时要从数据库里查StdItems这张物品表,但当前数据库里根本没有这张表。
AFT引擎和彩虹引擎虽然都叫“传奇世界单机/传奇类引擎”,但底层数据存放方式、表名、字段名、脚本目录、DB文件格式并不通用。你原来AFT能读到物品,不代表彩虹也能用同一套Mir200/Envir、Data、DB、sqlite/mdb文件。

先说AFT老重启的事。
AFT引擎以前常见重启原因有几个:网关和M2版本不一致、列表端口冲突、物品数据库有脏数据、脚本死循环、!Setup.txt路径错、MAP文件缺失、怪物库里引用了不存在的怪物、登陆器资源和引擎不匹配。AFT碰到严重错误有时会直接崩,表现为“服务器错误老是重启”。这时候正确做法是看Mir200/Log里的错误日志,而不是单纯换引擎。

你后来换彩虹引擎,启动到“正在加载物品数据库”就报nosuchtable:StdItems,说明:

1.彩虹引擎启动时会查StdItems表;
2.你当前使用的数据库文件里没有StdItems;
3.你大概率是把AFT的Data、Envir、DB或sqlite文件原样留着,没用彩虹自带初始库;
4.也可能是彩虹要的是StdItems.DB/Items.DB/某张sqlite表,而你放的是AFT的另一套结构。

传奇世界单机里,“物品数据库”在不同方案里可能是:

•Mir200/Envir/StdItems.DB(DBF/DB文件)

•Data/StdItems.db

•sqlite里的StdItems表

-某些引擎里的Items表而不是StdItems
•彩虹自己的一套StdItems、Monster、Magic、Npc表

所以select*fromStdItems这种语句一执行,sqlite/mysql里没这张表,就直接抛异常,M2加载物品阶段中断,服务器起不来。

处理思路别乱换引擎了,按下面来:

一、先确认彩虹引擎要用什么数据库
打开彩虹引擎目录里的说明、配置工具、!Setup.txt、DBServer配置、登录器配套文档。看它启动加载物品时,是从:

-Mir200/Envir/StdItems.DB
•还是Data/xxx.sqlite

•还是mysql里的某个库

•还是自带GameDB里的表

不同彩虹版本不一样。有的彩虹是老传奇世界改版,物品还是StdItems.DB;有的是sqlite,表名可能是StdItems、t_items、Items。

二、别把AFT的Envir直接覆盖到彩虹
AFT的:

•Mir200/Envir/QuestDiary

•Mir200/Envir/MapInfo.txt

•Mir200/Envir/MonGen.txt

-Mir200/Envir/StdItems.DB
•Mir200/Envir/Magic.DB

和彩虹不一定兼容。
你换引擎时如果只换了M2.exe、DBServer.exe、LoginGate.exe,但Envir还是AFT的,就会出现“能读配置、读到物品阶段报错”的情况。

正确做法:

1.先拿彩虹引擎原始包,什么都不改,能启动;
2.再把自己的地图、怪物、NPC、物品慢慢迁;
3.别AFT的Envir一把糊到彩虹上。

三、如果彩虹用sqlite/mysql,就建表或换库
报错是nosuchtable:StdItems,最直接就是当前库里没表。
你可以:

•用SQLiteStudio/Navicat打开彩虹的game.db/mir.db;

-看里面有哪些表;
•如果有Items没有StdItems,那就是版本差异;

•如果有空库,就导入彩虹原包里的StdItems.sql/init.sql/自带GameDB;

-别拿AFT的mdb当彩虹sqlite用。

四、如果彩虹用DBF/DB文件
那就看Mir200/Envir/StdItems.DB在不在。
常见情况:

•文件被你改名了;

-放错目录;
•原来是Items.DB,彩虹要StdItems.DB;

•文件损坏,引擎打开失败,回退到查sql表,自然查不到;

•引擎配置里写了“使用SQL模式”,但实际放的是DBF文件。

这时候要么关掉SQL模式,要么把DBF导进SQL。

五、AFT重启和彩虹报错是两件事
AFT重启可能是:

•网关版本不对

•登录器对不上

•地图编号错

•怪物刷新文件引用空怪物

-脚本@Login里写错命令
•MonGen.txt坐标/地图不存在

•MapInfo.txt里地图文件缺失

彩虹报nosuchtable:StdItems是:

-数据库/表结构不对
•数据文件没放对

•引擎模式和配套库不一致

也就是说,你以为“AFT不行我换彩虹”,其实只是把AFT的环境垃圾带进了彩虹。

六、最快救活方案
如果你只是想单机自己玩:

1.把现在这堆文件备份;
2.解压一份干净的彩虹引擎原版;
3.先启动原版,确认能到“服务器启动成功/等待连接”;
4.进游戏,确认能建号、能砍鸡;
5.然后再把AFT里你要的内容迁:
-地图:MapInfo.txt+Map文件
•怪物:Monster.DB/怪物表+MonGen.txt

•物品:别直接覆盖StdItems,用Excel/DBF工具比对字段后合并

-技能:Magic.DB/Magic表
•NPC:脚本目录整体拷,但检查命令是否彩虹支持

6.每加一类,重启一次,看报什么错。

七、字段不对也会间接导致这个问题
比如彩虹物品表里有:

idxNameStdModeShapeWeightDuraMaxACMACDCMCSCNeedNeedLevelPrice...


你AFT的表里字段名是别的,或者少字段、多字段,引擎初始化时可能会建临时表失败,然后后面select*fromStdItems就找不到表。
这种不是“表名拼错”那么简单,而是整套数据模型不兼容。

八、别信“AFT换彩虹只要换exe”
很多人操作是:

•M2.exe换彩虹

•DBServer.exe换彩虹

•LoginGate换彩虹

•Envir还是AFT

-Data还是AFT
•登录器还是AFT

结果就是:网关能起来,配置能读,物品一加载就炸。
引擎不是只换主程序,配套的是:

•数据表结构

•脚本命令集

•物品/技能/怪物字段

-地图格式
•登录器资源

•DBServer和M2的通信协议

九、日志比报错那一行更有用
你贴出来的是最后一行:

服务器启动异常!!!nosuchtable:StdItems
select*fromStdItemsorderbyidx


前面还会有类似:

•LoadStdItems...

•Opendatabasefailed

•Tablenotfound

•Field'XXX'notfound

-DBFopenerror
•SQLiteerror:nosuchtable:StdItems

看前面那几行,才知道它是SQL模式还是DBF模式。只看最后一行,容易误判成“只要建个表就行”。

十、临时绕过不算修好
有人会直接建个空表:
createtableStdItems(
idxinteger
Nametext
);


服务器是不报错了,但进游戏背包空、商店空、怪物不掉东西、NPC没物品,因为这表是空的。
正确做法是让彩虹用到“字段完整、数据完整”的物品库,不是糊张空表骗过启动。

十一、AFT总重启可以先这样查
既然你提到AFT老是重启:

•看Mir200/Log/*.log

•看DBServer是否先起、M2后起

•看LoginGate、RunGate端口是否重复

•看!Setup.txt里ServerName、DBServer、ShareDir路径

-看Envir/MapInfo.txt里地图文件是否都在Map/下
•看MonGen.txt里地图号是不是MapInfo存在

•看有没有NPC脚本死循环,比如@Login里无脑#ACT刷物品刷怪

-看登录器是不是AFT专用,别拿彩虹登录器登AFT

AFT能进但重启,往往比彩虹直接起不来更好修;彩虹起不来,说明配套完全不对。

十二、结论
你这个错误核心就是:

AFT环境+彩虹引擎=数据/表结构不兼容,导致加载物品数据库时找不到StdItems表。

不是彩虹引擎装错了,也不是系统缺运行库,而是你换引擎没换数据体系。
AFT重启归AFT,彩虹报nosuchtable:StdItems归彩虹,两件事根因不同,但都指向一句话:引擎、Envir、Data、DB、登录器不是一套。

最稳路线就一句:
彩虹用彩虹原包先跑通,AFT用AFT原包先跑通,谁先能进游戏就用谁,再小步迁移内容;别把AFT的Envir/DB/Data直接塞进彩虹。

你要是真想从AFT迁到彩虹,物品表、怪物表、技能表、NPC命令、地图格式都要按彩虹文档对齐,直接覆盖必炸。
[顶部]