RunUO遗迹UO完整端部署教程:从解压到私服开服 简介一套针对经典网络游戏《Ultima Online》UO的自建服务器端解决方案基于开源项目RunUO搭建面向希望拥有独立游戏世界的玩家和轻度技术爱好者。压缩包内含傻瓜说明书能显著降低入门门槛即使不熟悉服务器部署也能按指引完成配置与启动。包体共1161个文件总大小30.7MB涵盖cfg配置文件、map地图数据、log运行日志以及svn-base版本控制辅助文件等同时包含批处理编译脚本、C#中间语言文件及脚本参考压缩包便于后续对游戏逻辑进行修改与扩展。已有970人学习/下载适合作为体验UO私服架设或研究RunUO服务端结构的入门素材。通过这份资源玩家可以获得一套可直接部署的UO服务器框架、配套的编译与调试工具以及针对新手撰写的操作指引进而搭建出可邀请朋友共同游玩的私人世界并在此基础上根据喜好调整规则、添加新内容。1. 这标题写的不是资源包是一整套能跑的UO私服地基想跟几个老朋友重开一个UO服结果网上找一圈要么是老掉牙的下载链接要么下载完根本跑不起来。这个“遗迹UO完整-服务器端附傻瓜说明书_hatcz9_runuo_UO服务器端”的标题走的是另一条路它打包的是基于RunUO框架的服务端程序、地图数据、脚本和配置解压以后双击能直接起服务再用经典UO客户端指过来就能进游戏。它解决的是“我不想研究框架只想先把服务器开起来”的需求。适合三类人想跟朋友开小型私服的老玩家、想拿一套现成端练手改脚本的新手站长、以及好奇RunUO服务端目录结构的技术型玩家。下面按我自己的部署习惯把从解压到跑顺的全过程拆开讲。2. 整套端是什么架构为什么“完整版”默认锚定RunUO2.1 拆标题hatcz9_遗迹UO跟RunUO是什么关系标题里“hatcz9”通常是发布者的标识或压缩包命名习惯真正决定这套端能跑起来的是中间那个“runuo”。RunUO是UO模拟器里最主流的一套框架用C#写成2004年前后开始流行至今还有大量私服基于它的后续分支在维护。它做的事很简单把客户端发过来的协议包翻译成服务端的世界状态再管理地图、人物、怪物、物品和对话。对照表里能看到它和另外两条技术路线的差别模拟器路线语言脚本方式适合场景RunUO / ServUOC#C#脚本编译文档多、GM命令成熟、改物品属性方便SphereC自带脚本语言老端多但资料零散重战场逻辑POLC脚本语言偏Ultima Online前身风格维护者少“遗迹UO完整”里的“完整”二字意味着地图文件、动画数据、脚本编译好的DLL、配置文件、账号存档目录都齐了。市面上很多UO端只给源码和服务端框架没给Data目录新人拉下来一头雾水。这套只要你不动错文件理论上解压即跑。我拆过一些类似打包的端发布者通常把运行环境也写进说明书里这就是标题里“傻瓜说明书”的价值——它会把“哪些文件不能删”讲清楚。2.2 解压后先认目录这五个文件夹别乱动拿到压缩包解压以后会看到一个典型的RunUO风格目录结构。作为新手你只需要认准下面这几个关键目录别看到不懂的文件夹就删。目录名实际存放内容该不该动Config/服务器IP、端口、人数上限、经验倍率等要动这是配置口Data/地图mul文件、物品图标、颜色表、动画帧尽量别动缺失会黑图Scripts/C#脚本源码与编译产物Scripts.dll想改逻辑再动否则别动Saves/账号、人物、世界物品的定时存档定期备份它Logs/登录日志、GM操作日志、报错堆栈排错时看它这里的Data目录是UO服务端能不能显示完整地图的关键。展开后至少能看到map0.mul、statics0.mul、tiledata.mul、hues.mul这类文件。如果某个“完整版”压缩包解压以后没有Data目录那它多半只给了框架你得另找客户端里拆出来的数据这一步最容易劝退新手。所以拿到包以后第一件事就是检查Data目录是否存在且非空文件数不够的直接换端。2.3 跑这套端的最低环境要求与版本探测命令RunUO程序本体是.NET Framework时代的产物Windows上最常见的是跑在.NET Framework 4.x上也有人在Linux服务器上用Mono跑但新手不要给自己加这个难度。内存8GB足够CPU双核就行真正吃内存的是客户端不是服务端。开机前先确认系统的.NET版本可以打开命令提示符执行reg query HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full /v Releasereg query HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client /v Release第一条命令查的是完整版.NET Framework第二条查客户端配置文件版本返回值比如Release REG_DWORD 0x528f27代表已安装的版本号是长期服务版。如果返回“系统找不到指定的注册表项或值”说明机器上压根没装4.x框架去微软官网装.NET Framework 4.8再回来。这里有个血泪经验别只装“.NET Core”或“.NET 6”这套UO端跑的是老框架装错运行时它照样闪退。3. 从双击到进游戏最小启动流程与管理员账号落地3.1 解压与首启路径不能有中文首次存活几秒别急着关先把压缩包解压到一个纯英文路径下例如D:\UO\RelicUO不要放到“桌面”或者“新建文件夹”这种带中文的路径。RunUO的脚本系统在编译和写存档时对路径编码敏感中文路径会导致加载脚本报错或存档失败这是最多见的首启翻车原因没有之一。Linux上的启动方式如下cd /opt/uo mono RunUO.exeWindows下直接双击RunUO.exe或打开命令行进入目录执行。首次启动会看到控制台刷配置日志加载脚本会卡十几秒甚至更久这时候别以为死了就关掉。等到出现类似“World saved”或“Listening on 0.0.0.0:2593”的日志服务器才算真起来。首次启动会生成默认配置文件并创建初始存档目录后面的操作都是建立在“第一次完整启动成功”之上的。3.2 创建管理员账号的两种方式启动完成后控制台上通常会出现创建管理员账号的提示这是RunUO系端默认的行为。按提示输入用户名和密码就行这里强调几个点账号名不要用中文密码不要设成纯数字因为后面涉及GM命令操作时这个账号就是你的最高权限入口。# 如果启动控制台没有提示创建管理员可以进游戏后用自带命令提升权限 # 游戏内聊天框输入 [admin这个命令的作用是进入管理员模式的交互菜单或直接把当前账号临时切换成管理员权限。但你需要注意[admin只有在已经拥有Admin权限时才能把别人提升上去所以最稳妥的还是在控制台提示创建账号时就把管理员建立好。如果说明书里写了启动时的交互步骤照着做即可这段就是整套端“第一把钥匙”的拿法。3.3 客户端登录改login.cfg与第一次进世界的验证服务端起来以后客户端不会自动连过来。拿经典2D客户端举例我常见的做法是去客户端安装目录里找到login.cfg把服务器地址写到里面。# 在客户端目录下执行假设服务端就跑在本机 echo 127.0.0.1,2593 login.cfg这里2593是RunUO默认的服务器端口逗号后面不能有空格。改完以后启动客户端在登录界面输刚才建的管理员账号密码能进游戏看到地图就算打通了。如果客户端版本和服务端协议不匹配会卡在“验证账号”阶段或直接闪退那是版本问题不是网络问题后面避坑章会展开。第一次进游戏建议先别乱传送原地走两步看看地面纹理和光照是否正常确认Data目录加载没问题。4. 配置开门ServerList、端口与人数设置4.1 三个必须一起改的配置文件想把服务器从“本机能进”变成“局域网朋友也能进”甚至“云服务器上公网可访问”不是只改一个文件的事。RunUO体系里至少有三个配置文件要配合着改分别是ServerList.cfg、IPAddress.cfg和Config/ServerSettings.cfg部分端放在别处但命名基本可识别。# ServerList.cfg 核心内容通配符填法如下 Address127.0.0.1 InternalAddress192.168.1.100 Port2593Address是给公网客户端看的登录地址填你服务器的公网IP或域名InternalAddress是局域网客户端用的地址Port保持2593即可。很多新手只改了Address忘了InternalAddress结果局域网的朋友连不进来还以为防火墙拦了。IPAddress.cfg控制服务端实际监听哪个网卡地址云服务器改成0.0.0.0表示监听全部网卡。改法# IPAddress.cfg 0.0.0.0这段配置的意思是放弃“只让本机访问”的限制真正把游戏服务暴露到网络上。改完以后重启服务端让配置生效然后用客户端做一次登录验证。4.2 必调参数速查服务端跑起来以后控制台会输出大量信息但真正影响体验的参数集中在配置文件的几行里。我整理一份自用的调整顺序表按重要程度从先到后排列参数含义我常用的调整方向MaxClients最大同时在线人数小圈子服设16公网服按服务器带宽调MaxAccountsPerIP同一IP可建账号数防多开刷资源常设1到2MaxAddressesPerAccount一个账号可绑定的IP数默认即可别乱调AutoSaveInterval自动存档间隔分钟我习惯调到10防回档SpawnInterval怪物刷新间隔人多卡就调大这个值MaxClients这个参数最容易被忽略因为很多人以为它只跟服务器性能有关实际还跟客户端登录排队逻辑有关。同一时刻连接数超过MaxClients的玩家会看到“服务器满员”提示对小服来说这个值设在20附近既不会让朋友进不来又能防止未知访客把服务器挤爆。AutoSaveInterval则直接关系到“回档”这个悲催事件下面避坑章还会提到。4.3 让别人从公网连进来防火墙、安全组与端口验证如果整套端跑在云服务器上改完配置文件还差最后一步放行端口。不同云厂商叫法不同但都在安全组或防火墙中找到“入方向规则”新增一条放行TCP 2593的规则。然后是本地防火墙检查# 查看2593端口是否在监听 netstat -an | findstr 2593这条命令的作用是确认服务端确实在2593端口上Listen。如果输出里有LISTENING字样说明进程活着且端口已打开如果没有说明服务端没启动成功或端口被占用改用别的端口要记得客户端login.cfg也要同步改。公网访问的最后一步是从另一台机器上用telnet测一下端口通不通# 在另一台电脑上执行能连上说明端口通了 telnet 你的服务器公网IP 2593弹出一个黑窗光标闪烁就说明云服务器的安全组和防火墙都放行了。如果提示连接失败多半是安全组没放行或Address配错。这套检查顺序我从没失手比在一开始就怀疑服务端报错靠谱得多。5. 遗迹UO端跑起来的避坑记录五次“翻车”的排错路径5.1 双击后闪退窗口都没跳出来现象双击RunUO.exe以后屏幕上什么都来不及显示进程就消失了。原因不是脚本问题是运行环境缺失最常见的是机器没有安装.NET Framework 4.x其次是解压路径带中文或空格导致程序加载相对路径失败。解决先按第2.3节查版本没装就装装了还闪退就把解压目录挪到D:\UO\RelicUO这种纯英文路径再不行以管理员身份运行一次。我在帮朋友排这个问题时十次里有六次是前者四次是后者。5.2 客户端提示连不上服务器但服务端明明活着现象服务端控制台正常刷日志客户端却报“无法连接到服务器”。原因改了ServerList.cfg但没重启服务端或者改了IPAddress.cfg后忘记把监听地址改成0.0.0.0再或者客户端login.cfg里的端口和服务端实际监听端口不一致。解决先重启服务端再看服务端启动日志里有没有Listening on 0.0.0.0:2593这行字最后确认客户端login.cfg的端口和ServerList.cfg一致。这里我要单独强调ServerList.cfg的Port参数是客户端登录时访问的端口而IPAddress.cfg的端口才是服务端真正监听的端口两处必须同值。5.3 进入游戏后地面全黑、NPC不显示现象管理员账号能登录但整个世界像掉进黑洞地面是一整块黑色NPC也看不到。原因这是Data目录缺文件不是脚本或配置问题。有的“完整版”压缩包为了减小体积故意不打包map*.mul或tiledata.mul让玩家自己找客户端复制。解决从官方或其他客户端里拷贝缺失的mul文件到Data目录。常见缺的是map1.mul、statics1.mul和hues.mul这三件套补上地面和颜色通常就恢复了。这种问题最容易让人误判成“服务器坏了”其实服务端日志一直很正常。5.4 内存越跑越高人多以后一步三卡现象服务端刚启动时内存占用大概一两百MB跑了两天涨到上GB玩家一多走一步卡一下。原因RunUO的脚本里怪物刷新和物品掉落会产生大量临时对象C#的GC会回收但回收不及时时内存就被顶上去更直接的原因通常是SpawnInterval设得太短刷怪频率高到服务器处理不过来。解决把SpawnInterval调大到600秒以上同时把MaxClients限制在服务器带宽能承受的范围内。血泪经验不要靠“定期重启服务器”来治卡顿治标不治本先把刷怪频率压下来才是根上的方案。5.5 存档回档Saves目录被覆盖的惨案现象服务器运行中突然断电或强制结束进程重启后玩家等级和仓库物品退回几小时前。原因RunUO系列的存档不是“实时写盘”的它每隔一段时间才做一次全量保存断电时最后一次保存之后的数据全部丢失。解决一是把AutoSaveInterval调小到5到10分钟二是在关服前先输出执行强制保存# 游戏内GM命令手动保存世界状态 [save然后在游戏里用[save命令保存。这样做以后重启世界状态会回到最近一次强制保存的点。这里的关键认知是自动存档只是兜底不是实时数据保护UO服务端压根没有事务日志这种东西。养成“大改动前先设GM账号、保存世界”的习惯才不会再被回档搞崩心态。说明书里如果写了“关服前先在命令栏输入[save”真不是废话。6. 跑顺以后GM命令与三行备份脚本6.1 先给管理员命令列张清单日常运维其实用不到几个命令高频的就下面这些。注意所有命令都在游戏内的聊天输入框输入前缀是英文左方括号。命令作用备注[admin打开管理菜单或提升权限只对Admin有效[go X Y Z传送到指定坐标先看地图坐标再用[add 物品ID 数量生成物品到脚下刷装备常用[props查看目标属性点一下目标对象[save立即保存世界状态关服前必用6.2 三行备份脚本存档目录是Saves最简单的备份策略是每天定时打包一次。Windows下可以用计划任务指向下面这段命令tar -czf D:\UO\Backup\uo_%date:~0,4%-%date:~5,2%-%date:~8,2%.tar.gz D:\UO\RelicUO\Saves# 清理7天前的备份 forfiles /p D:\UO\Backup /m *.tar.gz /d -7 /c cmd /c del path第一行把Saves目录打包成带日期的压缩文件第二行删除7天前的旧备份。我一般把备份时间设在凌晨4点那时候在线人少存档写入压力低。6.3 一次教训与结尾我以前觉得备份麻烦改脚本前从不动备份结果是白天调SpawnInterval调崩了一处刷怪逻辑重启后直接回档一个练到七阶技能的角色没了。后来才学会两件事改任何配置前先备份以及关服前看一眼“World saved”日志再掐进程。这套流的价值在于把复杂的东西封装成一个能跑的起点但起点之后的路还得自己走。希望帮到你。本文还有配套的精品资源点击获取