前言:
以下将会以白话文或通俗易懂地说明讲解,主要面向小白人群,如有修正可联系本人
开发服务器所需要使用的编程语言Pawn,联机服务器的一切玩法、内容、功能都需要我们自己编写创造,这意味着开始是一片空白。
创造一个成熟的服务器需要一定的技术和编程经验,如果你愿意学习探索,一步步实现自己的想法和创意,这个过程会很有趣。
开发联机服务器的入门难度几乎为零,尽管门槛很低,但上限也很高,只有多看、多学、不断积累知识,巩固基础才能创造出成熟的脚本。
希望这个教程能起到抛砖引玉的作用,让大家了解原理和思路,尝试在没有任何编程基础的情况下快速入门,如果你想更好地学习开发,强烈建议先学习C语言基础。
想法、目标和心态
进行开发之前,你需要有想法和目标,你要做什么服务器,赛车?角色扮演?自由服?团队竞技?细化到每一个环节,学会使用思维导图去整理自己的玩法内容和开发思路。
同时把心态放好,接受别人的建设性意见、批评意见,不要把事情想得太复杂,给自己多一点自信心,如果你总是认为它太难了,那你永远都学不会,往往事情是很简单的。
不要急于求成,耐心且认真地对待它,也许一天的时间里你学会的知识很少,不要灰心,在日积月累中,也许你自己都没察觉到,你已经掌握了一门成熟的技术,任何事情只要你坚持做个几年,你就会成为里面的大神。当然不要让服务器开发占据你生活的全部,劳逸结合,如果你脑子里总是想着服务器开发的事情,这会让你坚持不了太长时间最终可能导致放弃。
什么是OPEN.MP (open multiplayer)
open.mp完全向后兼容,现有的SAMP客户端能够连接服务器,同时添加额外的功能,旨在构建1:1的SA:MP服务端还原
- 许多古老众所周知的SAMP错误和BUG已被修复(可参考sa-mp fixes)
- 包含大量安全、游戏行为和脚本修复
- 更高效的性能和效率,更现代化、且优雅的开发体验
- 也将会有新的open.mp客户端体验更有趣的内容
- 同时支持0.3.7和0.3DL客户端
- 内置了超过150个YSF的native功能,可前往open.mp功能列表了解详情
- 许多功能加入和大量原生功能升级,更多函数添加{Float, _}:…format的支持
- 关于标签矫正以及const矫正的规范性
- 包含最新版本编译器3.10.12,新增功能包含见此处,修复了原版3.2.3664的所有已知错误和BUG,同时能检测到更多你代码里的问题或者需要改善的地方,为 SA:MP 社区提供更好的开发体验
- 新的Pawn编辑器qawno编辑器包含在其中
- 符号长度限制增加到了64,你不再需要缩写你的函数名,同时一些原生的sa-mp函数名的缩写也变为了阅读性更好的全称,如GetRandomCarColPair变为GetRandomVehicleColourPair,以及更加规范的命名
官网:open.mp
官方论坛:open.mp论坛
圣安地列斯联机社区 & 国服开发者交流社区:673335567
教程
地图制作(可略过)
地图编辑器(下载地址:地图编辑器),把下载好的文件解压至游戏目录,双击editor.exe即可开始制作地图
地图编辑器视频教程:B站视频
你可以略过地图制作这一步,但还是建议了解一下,毕竟这是一个不错的开始
制作你第一个脚本
下载open.mp服务端
解压服务端至任意地方,内含以下文件,后面慢慢讲解这些文件
-
- 在
gamemodes
文件夹里新建一个文本文件main.pwn
我习惯取名为main,你可以根据自己的喜好命名,比如: server.pwn ?? 随便你,只要不是中文就好
- 在
-
- 打开
qawno/qawno.exe
,这是编写脚本需要用到的编辑器/编译器
- 打开
-
- 使用
qawno.exe
打开main.pwn
,把制作好的地图OBJ代码复制到OnGameModeInit
的花括号内
- 使用
代码如下所示:
#include <open.mp>
public OnGameModeInit()
{
CreateObject(2991, -3878.99219, 1992.43469, 2.75920, 0.00000, 0.00000, 6.09980);
CreateObject(9159, -3893.42627, 1969.96741, 16.66340, 0.00000, 0.00000, 89.99990);
CreateObject(8493, -3893.42090, 1969.95032, 16.67770, 0.00000, 0.00000, 89.99990);
CreateObject(16630, -3881.03906, 1972.13171, 1.87030, 0.00000, 0.00000, 0.00000);
CreateObject(19865, -3882.81201, 1974.27246, 3.29390, 0.00000, 0.00000, 91.19960);
CreateObject(12990, -3876.10938, 1986.94922, 1.83270, 0.00000, 0.00000, 89.99990);
CreateObject(2689, -3937.56201, 1990.49915, 5.20530, 0.00000, 0.00000, 90.00000);
return 1;
}
然后按F5进行编译,你会在相同目录里得到一个main.amx
的文件, main.amx
是编译成功后生成的脚本
恭喜你,你创造了你的第一个脚本。
配置服务器 并 开启服务器!
服务端内有一个用于修改服务器配置的文件:config.json
config.json 是服务器配置文件,相当于设置,设置服务器加载哪些脚本、服务器最多可容纳多少玩家,服务器的名字,服务器RCON管理员密码,服务器的游戏设置、网络配置等等…
找到name
这一行,在后面双引号里把我们的服务器名称修改为大航海时代
找到main_scripts
这一行,在后面方括号里,加入一个双引号,双引号里写上main,意思是加载刚才编译好的main.amx文件作为我们的主游戏模式
找到rcon
这一行,在后面的password
选项里修改一下rcon管理员密码,比如"123456789",这非常重要,尽量除了自己以外不要告诉任何人
"max_bots": 0,
"max_players": 200,
"name": "大航海时代",
"pawn": {
"legacy_plugins": [],
"main_scripts": [
"main"
],
"side_scripts": []
}
"rcon": {
"allow_teleport": false,
"enable": false,
"password": "123456789"
},
config.json提供了大量可自定义配置的选项,不需要焦虑,保持默认设置即可,除非你知道你在干什么,一般通过名称即可知道其功能作用
- 常用的比如:
- “network” : “port” 服务器端口
- “network” : “allow_037_clients” 是否允许0.3.7客户端进入服务器
- “max_bots” 最大NPC数量
- “max_players” 最大玩家数量
- “map” 地图名称
- “mode” 模式名称
- “website” 服务器网址
- “password” 服务器密码
- “artwork” : “enable” 是否启用自定义模型功能(也就是0.3DL功能)
- “exclude” 如果你不想加载components文件夹里的某个插件,你可以在此处排除它们
修改完服务器配置之后保存,双击omp-server.exe,即可开启服务器
打开samp客户端,输入IP: 127.0.0.1:7777,就可以进入自己的服务器进行本地联机了
如果你想让更多人加入你的服务器,你需要购置一台云服务器,把你的服务端上传到云服务器,其他玩家就可以通过公网IP搜索到你的服务器一起联机,这篇教程不教这些
什么是编译?
你可以理解编译本质上是一个翻译的过程,暂时理解它是一个翻译软件,把我们说的中文翻译成英文让外国人能听懂
编译是把我们写的代码(我们能理解的语言)翻译成二进制语言(计算机能理解的语言)