
简介面向想要自建《网络创世纪》UO服务器的玩家这是一套基于RUNUO框架的完整服务端部署包特别附带傻瓜说明书显著降低了搭建门槛。包内提供DLL生成批处理、C#脚本IL代码、参考脚本库、资源文件及运行配置管理员可按需修改游戏规则、添加功能甚至定制全新玩法。压缩包共1161个文件以cfg配置、map地图、log日志、dll动态库为主还有XML、HTML、批处理等辅助内容整体约30.7MB其中cfg用于服务器参数调整map负责地形数据加载log记录运行状态dll为编译后的功能组件。这些文件与txt版说明书配合可引导完成安装、配置与启动即便不熟悉代码也能按步骤架设私服。已有970人浏览学习适合希望拥有独立游戏环境、与朋友共同体验经典UO内容的玩家。1. 遗迹UO服务器端一份能直接拉起来的老牌模拟器如果你玩过经典MMORPG《网络创世纪》Ultima Online多半有过这种经历找了很多“一键端”解压后要么缺脚本要么启动报错要么登录进去黑屏。这份“遗迹UO完整-服务器端附傻瓜说明书”的特别之处在于它把RunUO服务器端、配套说明和启动路径都打包好了适合两类人一类是想省事开个私服和老朋友重聚的玩家另一类是研究经典C#模拟器源码的开发者。它解决的核心问题是在Windows上快速起一个可登录、可建角色、可进地图的UO世界。下面我会把目录结构、启动流程、连接客户端、常见翻车点和GM进阶挨个拆完。2. RunUO服务器端拆开看目录、启动机制与数据存档2.1 服务端目录树六个必须认识的文件夹解压“遗迹UO完整-服务器端”后第一件事不是双击exe而是先看目录结构。RunUO类的服务器端通常长这样D:\uo_server\ ├─ Config\ # 服务器配置 ├─ Scripts\ # C# 脚本游戏逻辑全在这里 ├─ Data\ # 地图、物品、NPC 的静态资料 ├─ Saves\ # 世界存档人物/物品/公会都在这 ├─ Logs\ # 服务器运行日志 ├─ Logs\ ← 网络日志 └─ Server.exe / RunUO.exe # 主程序我最看重的是Scripts和Saves这两个目录。Scripts是整个服务器端的逻辑层RunUO 在启动时会把目录下的.cs文件编译成程序集然后动态加载Saves则是世界快照所有玩家角色、背包、房屋数据都以 XML 形式存这里。Config目录决定服务器监听哪个IP、哪个端口、最多容纳多少玩家一般叫Server.cfg。下面的表格把每个目录的实际用途和常见改动点列出来目录职责你会在什么时候碰它Config服务器网络参数、存档间隔、日志开关改端口、改IP、改最大在线人数Scripts游戏规则、物品属性、NPC行为、指令系统增加自定义物品、调整战斗公式Data地图区块、物品ID、怪物模板等静态资料排查黑屏、地图加载失败Saves世界存档按 XML 保存备份、回档、改账号权限Logs连接日志、登录日志、异常日志排查启动崩溃和无法连接注意一点Data目录不是客户端资源它是服务端读取的地图与物品定义。如果这个目录缺失服务器端即使能启动玩家登录后也会一片空白。2.2 启动机制与端口从 Main 到监听 2593RunUO 的启动流程很直白但初次接触的人容易把它当成黑匣子。它的执行顺序大致是加载配置 → 加载数据文件 → 编译 Scripts → 加载存档 → 监听端口。当你双击Server.exe时控制台会输出类似下面这样的日志Loading configuration... Loading scripts... done (1234 scripts) Loading data files... Loading world... Listening: IP 0.0.0.0, Port 2593这段日志里我最关心的有两处。第一处是Loading scripts... done如果这里的数量比预期少说明某些脚本编译失败被跳过了第二处是Listening: IP 0.0.0.0, Port 2593它表示服务器已经开始监听。端口默认是 2593想在局域网或者公网开放时我会先在Config\Server.cfg里确认端口。配置文件的常见参数是AddressAny Port2593 MaxClients100AddressAny表示监听所有网卡这是最常见的需求如果只想让本机测试的人连可以写成127.0.0.1。MaxClients控制同时在线数家用小服务器不用开太高100 足够。改完配置要重启进程RunUO 不会热加载Server.cfg。启动参数方面如果是为了调试脚本我会带-debug参数启动这样可以拿到更详细的异常栈正常开服则不带参数直接跑日志量更小。2.3 数据存档机制Saves 目录就是你最后的后悔药RunUO 默认用 XML 文件存档不是数据库。玩家下线、世界定时保存时数据会写入Saves目录下的Accounts.xml、Mobiles.xml、Items.xml、Guilds.xml等文件。这个设计有好有坏好处是便于直接打开修改调个账号权限、改个物品坐标都很直观坏处是如果服务进程被强制杀掉最后一段时间的数据可能丢失。我一般会在每次改脚本或者开服前做一次备份命令是copy D:\uo_server\Saves D:\uo_server\Saves_backup_20250101 /E这里/E表示连同子目录一起复制。备份完了再动服务器遇到存档损坏时把Saves目录整个替换回去即可。注意替换前一定要停掉服务进程否则文件被占用复制不完整反而把备份目录搞脏。另外如果在压缩包里看到带SQL字样的目录说明作者额外接了数据库存储。但绝大多数 RunUO 分支的默认路径仍是 XML 存档不要一上来就去找数据库配置白白踩坑。3. 从零把遗迹UO跑起来环境准备、配置修改与第一次启动3.1 环境准备先装运行库再解压到干净路径拿到资源包后第一步不是解压是确认 Windows 环境。老版 RunUO 依赖 .NET Framework我建议先装好 .NET Framework 4.8Windows 10 和 Windows 11 多数已经自带但精简版系统经常缺。桌面环境下可以直接打开“控制面板 → 程序和功能 → 启用或关闭 Windows 功能”把.NET Framework 4.8勾上。解压路径也要注意。我踩过一次最蠢的坑路径写成了C:\Program Files (x86)\UO Server空格导致部分脚本读取相对路径失败。RunUO 对路径不算敏感但为了少折腾请把服务器端解压到类似D:\uo_server这种无中文、无空格的路径。如果资源包里带数据库初始化脚本通常叫install.sql之类说明需要 MySQL 或 MariaDB。常见做法是先建一个uo库再执行脚本CREATE DATABASE IF NOT EXISTS uo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE uo; SOURCE D:/uo_server/SQL/install.sql;如果不带数据库脚本就跳过这一步RunUO 会纯靠 XML 存档工作。很多新手以为“服务器端 必须装数据库”这是误解先看压缩包里有没有 SQL 文件再决定。3.2 配置修改端口、IP和存档间隔的三处必查项启动前我会先改三处配置全是经验之谈。第一处是Config\Server.cfg。这里管网络监听参数把端口改成你计划开放的端口IP 保持Any。如果单机测试改成127.0.0.1也行但要注意一旦改成回环地址局域网内其他人就连不进来了。第二处是Config\World.cfg。这里管世界保存频率常见参数有SaveInterval5.0表示每 5 分钟自动保存一次。我会把间隔调短一点比如SaveInterval3.0这样即使意外断电损失也不会太大。代价是频繁写盘会增加一点 IO 压力家用服务器完全扛得住。第三处是Config\Logging.cfg。这里决定日志保留策略。开服初期建议把所有日志都打开方便排查连接问题稳定运行一阵后再关掉部分冗长日志免得磁盘被刷满。修改前先备份原文件这是一个好习惯cd D:\uo_server\Config copy Server.cfg Server.cfg.bak copy World.cfg World.cfg.bak这样改坏了还能退回去。配置文件是纯文本用记事本就能编辑只是保存时记得把编码保持为 UTF-8否则可能出现中文注释乱码进而导致启动解析失败。3.3 第一次启动看日志而不是看图标配置改完后直接运行Server.exe或压缩包里对应的主程序。我习惯用命令行启动这样能看到完整输出cd /d D:\uo_server Server.exe如果程序自动退出先看控制台最后几行日志如果闪退太快看不到用命令行方式启动就能保留输出。正常启动时大约几秒到十几秒后控制台会停在Listening这一行说明服务器已经在跑了。启动完成后回到D:\uo_server目录确认Saves文件夹是否生成。第一次启动如果没有存档RunUO 会创建一份空的世界文件。这一步看不到Saves目录说明存档初始化失败后面登录基本没戏。压缩包里那份“傻瓜说明书”我完整看过一遍它把上述步骤拆成了更细的图文流程核心路径和我上面写的完全一致。如果你是纯新手先照说明书的顺序走一遍再回来看这篇笔记里的参数解释会更有底。4. 连接客户端与首个账号端口验证、版本匹配与角色创建4.1 客户端选型老客户端可以ClassicUO 更省心服务器端起来之后你还需要一个 UO 客户端来连接。这里有个老玩家都知道的坑客户端版本必须和服务端的协议版本匹配。RunUO 这一支模拟器通常对老客户端兼容得比较好一般用 7.0.x 左右的经典客户端即可。如果手头没有老客户端我建议直接用开源客户端 ClassicUO。它是目前兼容性最好的选择支持读取 UOP 和 MUL 格式的地图文件还能把服务器 IP 和端口直接配置在客户端启动参数里不需要改系统配置文件。客户端资源文件要和服务器端的Data目录对应。这个对应关系由服务端配置里的数据路径指定我一般会在启动前确认Data目录里地图文件的完整性。地图文件缺失时客户端登录成功但地面是黑的这个坑后面会专门讲。4.2 端口验证先 netstat再开防火墙打好客户端前先在你的服务器机器上确认端口真的在监听。运行下面这个命令netstat -ano | findstr :2593如果看到TCP 0.0.0.0:2593 0.0.0.0:0 LISTENING这行说明监听正常。如果看不到输出说明服务端没起来或者端口被配置改到了别处。这时回去看Config\Server.cfg里的端口号再和命令里的端口比对一遍。确认监听没问题后客户端连接不上十有八九是防火墙拦截。在 Windows 防火墙入站规则里新建一条允许 TCP 2593 端口的规则即可。局域网联机只做这一步就够了如果要公网联机还需要在路由器上做端口映射把外网端口转发到服务器内网 IP 的 2593 端口。先用局域网和本机测试通过再碰公网别一开始就想着穿透之类的操作。4.3 首次登录账号RunUO 没有注册页直接输入即注册在客户端登录界面服务器地址填写运行服务端的机器 IP端口填 2593账号和密码随便输入一个。RunUO 默认处理方式是如果账号不存在就自动创建一个如果存在验证密码。所以第一登录不需要去后台预建账号。登录成功后服务端控制台会输出类似这样的日志Login: hatcz9 New account created: hatcz9我的习惯是登录后第一时间打开Saves\Accounts.xml确认账号已生成。这个文件很重要后面提 GM 权限也要改它。接着在客户端里创建角色、选择职业、命名人物顺利的话就能进入初始地图。到这一步整个链路就算跑通了服务端监听、客户端连接、账号创建、角色创建、进入世界。如果卡在某一步先别怀疑资源包有问题去看Logs目录下的异常日志RunUO 绝大多数崩溃和连接失败都会留下记录。5. 避坑记录从启动闪退到地图黑屏的五个雷区5.1 启动闪退控制台一闪而过现象双击Server.exe后窗口瞬间消失什么信息都没留下。原因八成是 .NET Framework 运行库缺失或者解压路径包含中文/空格脚本加载相对路径失败。我第一回在这上面折腾了两小时最后发现是精简系统没装 .NET 4.8。解决先用命令行方式启动拿到错误信息然后补装 .NET Framework 4.8并把整个服务器端目录移到无中文无空格的路径比如D:\uo_server。如果日志提示缺少某个 DLL重点检查运行库是否完整而不是怀疑主程序坏掉。5.2 客户端提示“无法连接”或连接超时现象服务端明明在跑控制台也有Listening输出但客户端输入 IP 后一直转圈最后提示无法连接。原因第一反应看端口。可能改了配置没重启或者端口被其他程序占用。我遇到过另一个常见情况Server.cfg里写了Address127.0.0.1局域网其他机器自然连不进来。解决先本地netstat -ano | findstr :2593看监听地址。如果监听在127.0.0.1把配置改回AddressAny并重启。若端口被占用换一个端口同时把客户端连接端口也改掉。最后再检查防火墙入站规则。5.3 登录成功但地图全黑或无法行走现象账号能进角色能建但进入世界后地面是黑的人物原地不能动。原因服务端Data目录里的静态地图资源和客户端资源不匹配。UO 的地图分为服务端数据文件和客户端渲染资源两者版本不对就会出现黑地图。解决确认客户端版本和服务端要求一致特别是地图文件格式是 MUL 还是 UOP。然后把服务端Data目录对应的地图索引文件路径设置正确。用 ClassicUO 时可以在其配置界面里指定游戏资源目录指向那份完整的老客户端资源文件。5.4 重启后人物、物品回档现象玩了一会儿后重启服务器玩家再登录发现角色还在但背包物品或房屋数据丢了。原因RunUO 的存档是周期性写入 Saves 目录的。如果进程被强杀最后一次自动保存之后的新数据全部丢失。我把这叫作“没等到存档就拔电源”的典型翻车。解决把World.cfg里的SaveInterval调到 3 分钟让写入更频繁。平时养成手动保存习惯RunUO 控制台支持手动执行保存命令或者用 GM 指令强制保存。开服前先备份 Saves 目录再做其他操作。5.5 修改脚本后启动卡在 Scripts 编译失败现象往Scripts目录加了新.cs文件重启后控制台提示一堆 error然后服务器退出。原因RunUO 启动时会编译全部脚本任何语法错误、引用缺失都会导致编译中止。我见过最多的是复制脚本时漏了.cs后面对应的引用命名空间。解决看编译错误输出定位到具体文件和行号改回原文件或者从备份目录恢复。改脚本前先备份Scripts目录每次只改一个文件重启一次验证一次别一次性塞十个脚本进去否则你都不知道是谁把编译搞坏的。6. 进阶用法GM权限、常用指令与改脚本后的强制习惯现在你已经能把服务器跑起来也让朋友登录了。下一步通常是给自己开一个 GM 账号来刷物品、传送、调属性。我常用的方式是把已有账号提升为 GM直接编辑Saves\Accounts.xmlaccount namehatcz9 accessLevelOwner password.../password /account把accessLevel从Player改成Owner重启服务端生效。Owner是最高权限GameMaster次之Seer适合做环境观察。日常操作建议用GameMaster别拿Owner乱跑免得误删世界数据。进游戏后用[add指令刷物品比如刷 10000 金币[add Gold 10000用[props查看和修改目标属性用[tele传送到指定坐标。这些指令都带调试用途建议只在测试环境里用。我改脚本的习惯也固定了先把Scripts和Saves各备份一份再动代码重启后第一件事看控制台有没有编译错误第二件事进游戏验证改了的功能。从那以后我每次改完脚本都强制走一遍“备份 → 改动 → 重启 → 验证”的流程几乎没再弄丢过世界数据。希望这套笔记能帮你少走一段我走过的弯路。本文还有配套的精品资源点击获取