工程参考/配置文件/Server/LoginInfo.ini
这份文件控制 Login 自己的服务编号、数据库连接凭据和登录检查。它不包含玩家应该连接的 IP0;登录地址在 ServerInfo.ini,玩家区服列表在客户端 LoginServer.txt。
文件位置与生效
| 项目 | 说明 |
|---|---|
| 服务器运行路径 | Server/Config/LoginInfo.ini,以程序实际工作目录为准;源码 resources 中的文件是样本。
|
| 主要使用者 | 主要使用者为 Login,公共初始化同时读取 |
| 生效方法 | 这六份文件通过公共初始化流程读取,主要使用者在本页标明;不需要把它们复制到玩家客户端。重新加载配置的入口没有重读本页字段。修改后按正常流程保存并停服,再重启使用这份配置的程序;服务共用同一 Config 目录时,相关进程须使用一致配置。 |
| 样本格式 | UTF-8,换行为 CRLF;保留原编码、节名、键名与换行,不自动改成 UTF-8。
|
项目集中在 [System]。先核对 LoginID 对应的服务记录,再处理数据库或登录检查,不要同时改动无关项目。
文件格式
使用 [节名] 与 Key=Value。节名和键名按源码拼写保留;本读取器按大小写精确匹配,节标题从行首开始。推荐沿用原有 CRLF 换行,在单独一行用分号写注释,不向值里插入制表符,也不依赖引号转义。详细读取边界见修改约定。
字段详解
表中“必填”表示读取代码要求存在,并不表示程序已校验业务取值合法。序号字段中的 [n] 表示按数量展开,不能原样写成带 [n] 的键。
[System]
| 项目与类型 | 含义与修改要点 | 缺项或特殊值 |
|---|---|---|
LoginID整数,服务编号 |
引用 ServerInfo.ini 中 Type=1 的 ServerID;样本中 LoginID=2 对应 [Server1] 的 ServerID=2。不是 [Servern] 的 n。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBIP字符串,地址 |
保存配置中的数据库主机地址。当前核对的 ODBC 连接代码没有把它传入 SQLConnect;实际主机由 DBName 指定的数据源配置决定。修改它不能代替修改 ODBC 数据源。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBPort整数,端口 |
保存配置中的数据库端口。当前连接调用不使用此值建立连接;实际端口在对应 ODBC 数据源中设置。不能填游戏或登录端口。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBName字符串,ODBC 数据源名 |
作为 SQLConnect 的数据源名称传入。它要对应服务器电脑上已配置的 ODBC DSN;不一定等于数据库中的库名。数据源内部还需选对实际数据库。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBUser字符串 |
连接数据库使用的用户,不是玩家账号或 Wiki 账号。应具有目标数据库所需权限。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
DBPassword字符串 |
DBUser 对应的数据库凭据。填写自己的值,不照抄示例;格式还受本程序的 CryptPwd 处理影响。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
CryptPwd整数,建议使用明确的 0 或 1 |
大于 0 时用 Seraph::string2pwd 解码配置中的数据库密码;小于等于 0 时直接使用字符串。它不是玩家登录密码的加密开关,也不能把任意密文填写进来。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
ProxyConnect整数,模式 |
1:拒绝识别为代理来源的连接,返回默认入口;2:只允许直连或 EDU 代理来源;其他值:按线路选择返回地址。来源识别还依赖 ServerInfo.ini 的 [Proxy],运行拓扑需要实测。 | 原配置必填;读取失败会进入断言/错误路径,不把缺项视为采用默认值。 |
EnableLicense整数,0/正数 |
Billing 返回“没有新许可”结果时,大于 0 向客户端返回相应许可错误,小于等于 0 在该分支返回登录成功。不是启动许可文件路径;是否收到这一结果取决于账号服务,许可业务需要实测。 | 缺失时默认 0;样本未列出。 |
ReLoginLimit整数,0/正数 |
参与重复登录检查的总入口条件。它与 ReLoginStop 同时小于等于 0 时才直接跳过 IsAccCanReLogin;只改它为 0 不能保证跳过全部重复登录检查。 | 缺失时默认 1。 |
ReLoginStop整数,0/正数 |
大于 0 时参与密码检查结果记录及暂停登录处理,受账号状态、IP 和重试记录影响;不是封号时长。 | 缺失时默认 1。 |
ReLoginStopTime整数,毫秒 |
重复登录暂停状态的持续时间,600000 表示 10 分钟。不是所有登录之间的固定等待时间。使用正值;非正值的实际流程需要实测。 | 缺失时默认 600000。 |
NotifySafeSign整数,0/正数 |
大于 0 时相关认证分支等待客户端安全标识通知,须与客户端协议匹配;不是密码或验证码开关。 | 缺失时默认 1。 |
ClientVersion样本遗留项 |
当前服务端加载及使用检索未找到这个键的读取。保留原值;不能据此认为能修改客户端版本检查、数据库连接数或每轮玩家数量。 | 未发现读取;名称不作为效果依据。 |
DBConnectCount样本遗留项 |
当前服务端加载及使用检索未找到这个键的读取。保留原值;不能据此认为能修改客户端版本检查、数据库连接数或每轮玩家数量。 | 未发现读取;名称不作为效果依据。 |
TurnPlayerCount样本遗留项 |
当前服务端加载及使用检索未找到这个键的读取。保留原值;不能据此认为能修改客户端版本检查、数据库连接数或每轮玩家数量。 | 未发现读取;名称不作为效果依据。 |
常用修改实例
以下均是局部教学片段,修改原文件对应位置,不能覆盖整份文件。IP、编号、周期均为教学值。
让 LoginID 与现有登录服务记录对应
修改前的教学片段:
[System] LoginID=1
修改后:
[System] LoginID=2
仅当 ServerInfo.ini 已有 Type=1、ServerID=2 的登录记录时使用此改动;1 和 2 均为教学值,不表示你的旧配置一定是 1。保留数据库与登录检查项,不修改 ServerID 来凑序号。
验证与排查
重启后检查 Login 能找到自己的服务编号、数据库连接成功,再用匹配客户端登录并进入角色列表。修改重试策略后,需分别测试正常登录、短时间重复登录及错误密码;当前文档没有执行这些游戏测试。
数据库通过 ODBC DSN 连接。修改数据库地址时,在服务器上打开与 Login.exe 位数匹配的 ODBC 数据源管理器,修改 DBName 所指数据源并测试连接;64 位 Windows 中 System32 的 odbcad32.exe 管理 64 位数据源,SysWOW64 中的管理 32 位数据源。不要把任意文本加引号当作 INI 转义。
关联与依据
ServerInfo.ini · BillingInfo.ini · ShareMemInfo.ini
Common/ServerBase/Config.cpp:加载位置、字段读取与重新加载范围Common/ServerBase/Config.h:初始化值与配置结构Common/ServerBase/Ini.cpp:INI 实际解析规则Common/ServerBase/Ini.h:读取失败与返回方式Common/ServerBase/FileDef.h:运行时相对路径Common/GameDefine2.h:程序类型与共享内存类型枚举Server/Server_2026_Project.props:当前 Windows 工程的条件编译定义Server/Server/LoginServer/Login/DB/LoginDBManager.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/DB/DBThread.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Main/ReLogin.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Packets/BLRetAccCheckHandler.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Packets/BLRetAuthHandler.cpp:字段使用、连接或数据处理分支Server/Server/LoginServer/Login/Packets/CLConnectHandler.cpp:字段使用、连接或数据处理分支Common/DBSystem/DataBase/ODBCInterface.cpp:ODBC DSN 连接调用Common/ServerBase/TimeManager.cpp:计时单位
核对范围为当前维护源码与配置样本;未启动游戏、服务端或数据库。配置解析测试与游戏业务测试分开记录;文中运行效果仍需要实测。