简介这份资源是 AMXX 1.8.1 的中文简体、繁体中文与英文三语版本面向 Half-Life 系列游戏服务器的插件开发者、服主以及希望定制游戏模式的玩家。AMXX 基于 MetaMod 构建插件支持自定义游戏模式、角色能力调整和流程控制等脚本编写三语支持尤为重要的是降低了国内及繁体中文用户的使用门槛也便于对照英文原版查阅接口说明。压缩包内共 203 个文件约 3.4MB涵盖 sma 源码、inc 头文件、amxx 已编译插件、dll 动态库、ini 与 cfg 配置、txt 文档及 exe 工具等基本覆盖从编译开发到服务端部署的完整链路并附有 statsx、admincmd、plmenu、miscstats 等示例插件可供参考。目前已有 532 人浏览学习适合希望快速上手 AMXX 脚本、对照示例理解插件结构并搭建个性化服务器的初、中级开发者。1. 装 AMXX 1.8.1 之前先搞清楚它挂在哪一层第一次装 AMXX 1.8.1 中文 繁體中文 英文版出错的原因一般不是命令写错而是把它当成解压就能用的整合包直接丢进服务端根目录。AMXX 不是独立服务端它挂在 Metamod 下面属于元模块路径差一层服务端要么起不来要么能起来但控制台敲meta list一片空白。1.8.1 这个版本号有点特殊它足够老老到和后来重编译的 HLDS 偶尔不兼容但也足够耐用到现在还有一批服在跑。这篇按一台空服务端的顺序把版本怎么对、三语包怎么放、modules.ini 怎么开口子、坏了怎么救过一遍。适合第一次搭 GoldSrc 服务端的人也适合手里有旧整合包想重装的人。2. 版本与环境对齐HLDS、Metamod 1.19 与 AMXX 1.8.1 三语包的搭配动手前先花十分钟确认三件事服务端是哪一版 HLDS、Metamod 用哪个小版本、三语包里的文件是不是齐的。这三件事任意一件对不上后面改多少配置文件都不会生效只会让你在日志里来回翻。2.1 先把服务端骨架摆正addons 的落点只有一处AMXX 的所有文件都落在 mod 目录下的addons里。CS 1.6 的 mod 目录叫cstrike所以路径是cstrike/addons/amxmodx这是安装位置固定、不能临时改的地方。很多人出问题就出在这一步把压缩包解出来的amxmodx放到cstrike根下或者在外面多套一层目录叫amxmodx181Metamod 按路径找不到.so只会在日志里留下一行不容易注意到的错误。先看清楚自己手上的目录结构再决定往哪拷# 站在服务端根目录看两层目录就够了别急着拷文件 cd /srv/hlds tree -L 2 -d . | head -20 # 期望能看到 # ├── cstrike - mod 目录所有插件都往里放 # │ ├── addons - 元模块专用目录 # │ └── maps # ├── hlds_run - Linux 启动脚本 # └── steam.inf确认结构没问题之后把addons下缺的两个目录先建出来避免后面拷到一半才发现父目录不存在cd /srv/hlds/cstrike/addons mkdir -p amxmodx metamod ls -ld amxmodx metamod # 常见做法是让这两个目录和 hlds 运行用户同属主 # 后面 amxx 要往 logs/ 和 data/ 里写文件属主不对会在启动阶段就失败路径放什么要不要改cstrike/addons/amxmodx/dlls/amxmodx_mm_i386.soLinux/amxmodx_mm.dllWindows不改名cstrike/addons/amxmodx/modules/fun、engine、cstrike等模块二进制不改名cstrike/addons/amxmodx/configs/amxx.cfg、modules.ini、plugins.ini、users.ini要改cstrike/addons/amxmodx/plugins/.amxx插件按需加cstrike/addons/amxmodx/data/lang/三语语言文件要核对编码cstrike/addons/amxmodx/logs/运行日志保证可写提示dlls和modules是两个不同目录。前者只有一个元模块入口后者是功能模块拷错位置的典型症状是meta list里有 amxmodx但amxx modules全是 bad load。2.2 Metamod 用 1.19 还是 1.201.8.1 的兼容边界AMXX 自己不直接被 HLDS 加载中间隔着 Metamod。1.8.1 时代的常见搭配是 Metamod 1.19 系列1.19、1.19p32或 1.20两者都能挂上差别在细节1.19 的plugins.ini格式更老派路径容错也低但坑少、行为可预期1.20 对路径和大小写的容忍度高一点日志也更清楚。手上一台老服务端跑着别的元模块时不要为了“升级”换 Metamod 小版本先把 AMXX 挂上去再考虑升级。另一个需要提前想清楚的是 HLDS 的版本。1.8.1 是 2007 年前后的产物2013 年之后 HLDS 被重新编译过一轮部分老模块在新 build 上会出现加载失败或进服即崩的情况。常见做法是新 build 先在一台小号测试服上装一遍确认amxx modules没有 bad load、玩家能进服能看菜单再考虑放到正式服正式服本来跑着老 build比如 4554、5758 这类并且没别的问题就别顺手升级。2.3 三语包的取舍中文、繁體中文、英文各压在哪所谓“中文 繁體中文 英文版”指的是同一个 AMXX 1.8.1 核心里带了三种语言的data/lang文件。它不是三个不同的安装包也不需要装三遍语言是运行期按客户端选的语言去取字符串的。所以安装只做一次三语共存靠语言文件齐全加上multilingual.amxx这个插件。语言语言代号常见影响范围简体中文cn玩家菜单、管理命令回显、聊天提示繁體中文zh同上英文en默认语言缺失的键会回落到这里代号只是文件和配置里用的标识真正起作用的是data/lang/*.txt里有没有对应的节。拿到包之后先扫一眼data/lang里common.txt、admincmd.txt、plmenu.txt这几个文件打开看看有没有多语言节比在服务端反复重启快得多。3. 正式安装把 AMXX 1.8.1 挂进 addons 并让 modules.ini 生效前面是准备工作这一章是真正的安装动作。顺序不能乱先落文件、再挂 Metamod、然后开模块、最后开插件。任何一步跳过去后面排查都会多花一倍时间。3.1 解压与落位路径改名是第一个坑拷文件这一步只有两个要求不改名、不拍平。-a参数保留权限和符号链接比cp -r更适合拷这种带二进制模块的目录cd /srv/hlds/cstrike/addons # 把包里解出来的 amxmodx 整个放进来目录名保持 amxmodx cp -a /root/amxx181/amxmodx ./ # 属主换成 hlds 运行用户否则 logs/ 和 data/ 写不进去 chown -R hlds:hlds amxmodx # 目录要能进、.so 要能读能执行 find amxmodx -type d -exec chmod 755 {} \; find amxmodx -name *.so -exec chmod 755 {} \; find amxmodx -maxdepth 1 -type d逻辑不复杂cp -a是为了不丢权限位chown是因为 hlds 一般不用 root 跑chmod 755只给目录和.so配置文件保持 644 就够。拷完立刻ls addons/amxmodx/dlls确认里面是amxmodx_mm_i386.so不是压缩包里套的第二层同名目录——套一层是解压工具最容易造成的“翻车”点。3.2 挂载 Metamodliblist.gam 和 plugins.ini 两处都要动Metamod 的挂载分两步。第一步告诉 HLDS“游戏 DLL 换成 metamod”改的是cstrike/liblist.gam// /srv/hlds/cstrike/liblist.gam // 这个文件是 Quake 风格文本注释用 //不是 ; gamedll addons/metamod/dlls/metamod.dll gamedll_linux addons/metamod/dlls/metamod_i386.so第二步告诉 Metamod“再去加载 amxmodx”改的是addons/metamod/plugins.ini; /srv/hlds/cstrike/addons/metamod/plugins.ini ; 格式平台 相对 cstrike 的路径一行一个 linux addons/amxmodx/dlls/amxmodx_mm_i386.so win32 addons/amxmodx/dlls/amxmodx_mm.dll参数说明只有两条值得强调路径一律相对cstrike写不要写绝对路径平台前缀 Linux 必须写linux写成win32在 Linux 上不会报“找不到”只会安静地不加载。改完这两个文件重启服务端控制台敲meta list看到amxmodx且状态是RUNNING才算挂上。注意liblist.gam里gamedll_linux和gamedll两行都要留很多整合包只改了一行Windows 侧或 Linux 侧总有一边起不来。3.3 modules.ini 和 plugins.ini先跑核心再逐个加功能模块比插件先加载模块坏了依赖它的插件全是红字。所以第一次装不要一次开满先把这几个打开; /srv/hlds/cstrike/addons/amxmodx/configs/modules.ini ; 分号开头是注释取消注释即启用 fun engine fakemeta ; cstrike ; 只在用到 CS 相关 native 时开开了以后别随意关部分插件行为会变 ; hamsandwich ; geoip ; 要按地区做限制才开还需要额外的数据文件 ; sockets插件这边同理先只保留基础项跑通再加自定义插件; /srv/hlds/cstrike/addons/amxmodx/configs/plugins.ini admincmd.amxx ; amx_map / amx_kick 这些基础命令 adminhelp.amxx ; 玩家端 /help 菜单 adminslots.amxx ; 预留通道 multilingual.amxx ; 三语切换靠它装中文/繁體中文版必须保留 menufront.amxx plmenu.amxx mapsmenu.amxxmultilingual.amxx这一行是最容易被整合包删掉的。删了以后语言文件还在、配置也对但客户端就是切不了语言排查起来特别费时间。文件名一律带.amxx后缀写成admincmd会静默跳过——插件不会加载也不会报错只在amxx plugins里少一行。3.4 amxx.cfg装完立刻要改的六个值configs/amxx.cfg是 AMXX 的主配置几百行里第一次只需要动六处; /srv/hlds/cstrike/addons/amxmodx/configs/amxx.cfg amx_default_access z ; 普通玩家的默认权限z 表示只有最基础的权限 amx_password_field _pw ; 客户端 setinfo 里存密码的字段名改名后老玩家要重设 amx_mode 1 ; 1 按 users.ini 校验密码0 不校验 amx_show_activity 2 ; 管理操作是否广播2 匿名广播避免公开管理员名字 amx_language cn ; 服务端默认语言没选过语言的客户端走这一档 amx_client_languages 1 ; 允许客户端自己切语言关掉就只能用默认语言改这几个值的逻辑是默认权限给最小、密码字段别乱改、模式先开校验、广播注意隐私、语言先定默认再放开客户端自选。键名在不同小版本里偶有出入以你包里amxx.cfg自带的注释为准不要照抄网上别版本的片段覆盖整段配置。4. 三语共存配置lang 目录、编码和两层语言设置三语包能不能用八成看编码两成看语言设置。语言文件本身是纯文本但 AMXX 读取时对编码敏感这一点在中文服上体现得特别明显。4.1 data/lang 结构语言代号和文件的对应关系data/lang下是一堆.txt每个文件内部按[语言代号]分节。核心的几个文件决定了玩家看到的大部分文字cd /srv/hlds/cstrike/addons/amxmodx/data/lang ls | head -20 # 三语包里最该核对的是这几个 # common.txt 权限不足、命令用法这类通用提示 # admincmd.txt 管理命令的回显 # plmenu.txt 玩家菜单项 # mapsmenu.txt 换图菜单打开common.txt看一眼节头正常长这样; addons/amxmodx/data/lang/common.txt节选 [en] NO_ACCESS You do not have access to this command [cn] NO_ACCESS 你没有权限使用这个命令 [zh] NO_ACCESS 你沒有權限使用這個指令如果只有[en]一节说明这份包是英文原版中文部分没打进去如果[cn]里有内容但显示乱码先别怀疑 AMXX直接查编码。4.2 编码UTF-8 无 BOM不要用记事本另存为 ANSI语言文件必须是 UTF-8 且不带 BOM。BOM 会让文件里第一个键读不到症状很隐蔽其他提示都正常只有某一句话显示成键名。GBK 更直接整段中文变问号。查编码用两条命令就够cd /srv/hlds/cstrike/addons/amxmodx/data/lang # 看文件声明的字符集 file -i common.txt # 期望text/plain; charsetutf-8 # 异常charsetunknown-8bit多半是 GBK/ANSI # 看开头三个字节确认没有 BOM head -c 3 common.txt | xxd # 期望不是 efbbbf确认是 GBK 之后用iconv转一遍转完再重启服务端# 先备份编码转换是不可逆操作 cp common.txt common.txt.bak iconv -f GBK -t UTF-8 common.txt.bak -o common.txt file -i common.txt转完记得把整个data/lang目录扫一遍一个文件坏掉就够让玩家觉得“中文版是假的”。改语言文件不需要重新编译任何东西重启服务端或换图后生效。4.3 服务端和客户端两层语言设置语言有两层服务端定默认客户端自己选。服务端那层在amxx.cfg的amx_language cn客户端那层靠multilingual.amxx提供的菜单和命令。玩家进服后在控制台敲amx_language zh就能切成繁體中文敲amx_language en切回英文不记得命令的话用amx_help翻一遍菜单也能找到语言入口。自定义插件想支持三语不能把中文直接写死在代码里要用register_dictionary加%L// addons/amxmodx/scripting/cn_welcome.sma #include amxmodx public plugin_init() { register_plugin(CN Welcome, 1.0, anon) // 不注册字典%L 找不到键客户端只会看到键名本身 register_dictionary(cn_welcome.txt) register_clcmd(say /cn, cmd_cn) } public cmd_cn(id) { // %L 会让 AMXX 按这个客户端自己选的语言去 lang 文件里取串 client_print(id, print_chat, %L, id, CN_WELCOME) }对应的语言文件放在data/lang/cn_welcome.txt文件名和register_dictionary里的名字必须一致节名用en/cn/zh。编译用包里自带的编译器别用新版本编译器产物cd /srv/hlds/cstrike/addons/amxmodx/scripting # -o 指定输出到 plugins 目录编译产物才和 1.8.1 的核心匹配 ./amxxpc cn_welcome.sma -o../plugins/cn_welcome.amxx编译完在plugins.ini里加一行cn_welcome.amxx换图进服敲say /cn三种语言各看一遍——这一步同时也是验证语言链路是否通的最快手段。4.4 管理员配置users.ini 的中文名和账号类型管理员写在configs/users.ini一行一个四段用引号包起来; addons/amxmodx/configs/users.ini ; 名字 密码 权限串 账号类型 ; 最后的 a 表示密码输错就直接断开避免有人反复试密码 值班管理员 换成你自己的口令 abcdefghijklmnopqrstu a两个容易踩的点。一是名字带中文时users.ini也必须是 UTF-8用 GBK 保存会导致按名字认人失败表现为“密码没错但就是没权限”。二是账号类型那一位决定服务端按什么认人——按名字加密码、按 IP 还是按 SteamID含义写在文件顶部注释里照抄网上老例子经常对不上。改完不用重启控制台执行amx_reloadadmins重载即可这比反复重启服务端安全得多。5. 常见问题排查起不来、插件不加载、中文变问号装 AMXX 出问题的表现高度集中就那么几类。下面五条是我自己踩过、也帮别人看过最多的按“现象 → 原因 → 解决”记遇到时逐条对。5.1 服务端起不来、AMXX 挂不上现象服务端能启动但控制台meta list里只有 metamod 一行没有 amxmodx或者启动日志里出现failed to load后面跟着addons/amxmodx/dlls/amxmodx_mm_i386.so。原因三种可能——metamod/plugins.ini里平台前缀写成了win32路径少一层或多一层比如写成addons/amxmodx/amxmodx_mm_i386.so.so的属主或权限不对hlds 用户读不到。解决先按 3.2 的相对cstrike路径逐字符核对再执行ls -l addons/amxmodx/dlls/看权限位最后chown -R hlds:hlds addons/amxmodx重启。三步走完基本都能挂上。现象meta list里有 amxmodx但状态是BADF或PAUSED玩家进服报错。原因多半是modules.ini里开了不存在的模块或者logs/目录不可写导致核心初始化中断。解决amxx modules看哪个模块 bad load先把modules.ini回退到 3.3 的最小集合再确认logs/和data/属主正确、目录权限 755。不要图省事上 777出问题时反而查不清是谁写的。5.2 插件不加载、语言不生效现象amxx plugins里插件名后写着unknown或error日志里出现Plugin uses an unknown function。原因插件是用更高版本 AMXX 编译的引用了 1.8.1 没有的 native 函数。这是版本不一致最常见的表现形式。解决用包里自带的amxxpc重新编译.sma或者换一份明确标注 1.8.1 的.amxx。编译前先看源码的#include里有没有你用不到的模块。现象中文显示成问号、方块或者干脆显示成CN_WELCOME这样的键名。原因语言文件存成了 GBK 或带 BOM客户端没设语言走了[en]节自定义插件忘了register_dictionary。解决按 4.2 用file -i和xxd查编码并iconv转换客户端敲amx_language cn再试插件源码里补上字典注册后重新编译。现象玩家能进服管理员账号也写了但命令提示“没有权限”。原因users.ini用 GBK 保存导致中文名匹配失败改完没重载账号类型那一位和实际登录方式不匹配。解决file -i configs/users.ini确认 UTF-8控制台amx_reloadadmins再进服试一次。还不行就把名字临时改成纯英文验证能通就说明是编码问题不通就回去检查权限串。6. 装完怎么验证四条命令加一张自检表验证不要靠“感觉能玩”要靠输出。我的习惯是从服务端控制台往客户端方向走一遍四条命令按层递进# 第一层元模块有没有挂上amxmodx 必须是 RUNNING meta list # 第二层功能模块有没有坏重点看有没有 bad load amxx modules # 第三层插件加载数量对不对有没有 error / unknown amxx plugins # 第四层版本号确认避免旧文件覆盖导致实际跑的不是 1.8.1 amxx version四条都干净之后再做一次客户端侧验证进服敲amx_language zh看菜单是不是繁體中文敲amx_language cn看简体敲amx_language en看英文最后say /cn看自定义字典有没有生效。三种语言来回切两遍比只看一种可靠得多——很多编码问题是单文件级的只测一种语言根本发现不了。检查项命令期望结果不符合时看哪里元模块meta listamxmodx状态RUNNINGmetamod/plugins.ini、.so本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?