前言
想体验经典 Q 版西游霸服快乐吗?想体验满级 VIP 的尊贵吗?想体验一招秒杀的爽快吗?各种极品装备、翅膀、宠物通通给你,就在梦幻西游!
本文讲解梦幻西游 H5 游戏的架设教程,想研究 H5 游戏如何实现,体验游戏中秒天秒地秒空气的一定不要错过。
我架设的梦幻西游链接:http://101.43.194.154:52,登录就送满级 VIP 和终生卡,关注我的微信公众号 echeverra 发送 “梦幻西游”,获取游戏源码,发送 “梦幻西游 GM”,告诉我你的游戏角色名,我会第一时间给你授权后台 GM,快来体验一下吧。
如果你对 H5 游戏感兴趣,推荐另外几款我架设的 H5 游戏:H5 游戏整理汇总,欢迎来玩耍~
梦幻西游游戏截图:
架设
1. 架设条件
梦幻西游架设需要准备:
- linux 服务器,推荐 centos7/8 版本,可以考虑阿里云腾讯云等。
- 游戏源码,关注我的公众号 echeverra,发送 “梦幻西游” 获取。
游戏源码中已去除广告,并修复部分功能。
2. 安装宝塔及环境
宝塔是一个服务器运维管理软件,安装命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh |
安装完后,按照提示信息登录宝塔(如果无法访问可能是由于服务器没有开放 8888 端口,参考第 5 条开放端口),并在宝塔软件商店中搜索以下软件安装:
- web 服务器:nginx 1.20
- 数据库:mysql 5.6
- 编程语言:PHP 5.6、PHP 7.4
- 数据库管理工具:phpMyAdmin 4.9
3. 上传源码
拿到源码后解压会得到 sql 和 xyh5 两个文件,将 xyh5 压缩文件通过宝塔上传到根目录(如果宝塔禁止上传到根目录,可上传其他路径后剪切粘贴到根目录)。
上传成功后解压到根目录
解压完成后,通过命令授予 777 权限
chmod -R 777 /home/server | |
chmod -R 777 /www/wwwroot/xy |
安装 lua 脚本
cd /home/soft | |
tar -zxvf lua-5.1.5.tar.gz | |
cd lua-5.1.5 | |
make linux test && make install |
安装 lua 相关依赖
yum install readline-dev readline-devel unzip |
安装模块管理工具 luarocks
cd /home/soft | |
tar -zxvf luarocks-3.0.4.tar.gz | |
cd luarocks-3.0.4/ | |
./configure —with-lua=/usr/local —with-lua-include=/usr/local/include | |
make && make install && make bootstrap | |
luarocks install luasocket |
4. 导入数据库
通过宝塔修改数据库 root 密码:echeverra(涉及到安全问题,建议修改成自己的密码,对应源码中的 echeverra
也需替换成自己的密码,推荐使用 webstorm 或 vscode IDE 全局搜索并替换)。
开放数据库远程权限:
mysql -u root -pecheverra | |
GRANT ALL PRIVILEGES ON *.* TO ‘root’@‘%’ IDENTIFIED BY ‘echeverra’ WITH GRANT OPTION; | |
FLUSH PRIVILEGES; | |
quit |
创建以下数据库:
- account
- chargeserver
- gameserver(字符集 UTF-8,排序规则 utf8_unicode_ci)
- gmserver
- oaglobal
- operationanalysisserver
- worldserver
其中 operationanalysisserver
名称过长,在宝塔界面会创建数据库失败,可以在 phpMyadmin 中创建。
建议所有数据库都按照字符集 UTF-8,排序规则 utf8_unicode_ci 创建,否则会出现游戏创建角色失败的错误。
上传 sql 文件夹下的数据库文件并导入,以 account 为例(用户名密码默认即可,代码中使用 root 账户)。
5. 开放端口
需要开放的端口:
- 宝塔:8888
- phpmyadmin:888
- mysql:3306
- 游戏相关端口:80、10001、11001、12001 、8001、8004
服务器开放端口,以阿里云开放 10001 端口为例,其他端口按照同样方式添加,其他服务器也在安全里设置。
宝塔开放端口,同样以 10001 端口为例:
如果不开放端口,服务会无法访问,如果对安全没什么要求,可以直接开放 1-65535 端口。
6. 修改 IP
源码中的 IP 是我自己虚拟机的,需要替换成你自己的服务器 IP。
需要修改 IP 的文件:
/www/wwwroot/xy/cdn/preload.js | |
/www/wwwroot/xy/cdn/index.min.html | |
/www/wwwroot/xy/cdn/serverlist.php | |
/www/wwwroot/xy/cdn/serverlist.json |
举例修改 preload.js
文件,其他文件修改方式相同。
找到 preload.js
双击打开编辑模式,按 Ctrl+F 搜索 39.105.134.68,找到后替换成你的服务器 IP 并保存。
7. 创建游戏网站
添加游戏网站才能访问游戏,网站域名写你的 IP,根目录为 /www/wwwroot/xy/
,PHP 选择 5.6 版本。
8. 开启游戏
以上都执行完毕,那么就到了激动人心的启动游戏啦,启动命令:
cd /home/server | |
sh start.sh |
启动成功后查看下端口 10001、11001、12001 、8001、8004 是否监听中,少任何一个都无法成功启动游戏。
netstat -lntp |
访问游戏链接:http://IP/cdn/
,使用你服务器的 IP。
输入用户名密码,点击一键注册或登录,等待资源加载完成,选择分区(只有一个区),进入游戏,Nice~
如果加载到 95% 一段时间不动,说明 10001 端口没有在监听中。
9.GM 工具
游戏 GM 工具访问链接:http://IP/gm/gm.php
,账号 admin,密码 123456,可以给游戏玩家授权 GM 功能,同样也可以给玩家充值发送物品。
刷新游戏后邮件查收。
10. 关闭游戏
关闭游戏执行命令:
cd /home/server | |
sh stop.sh |
后续
1. 修改 GM 账号
修改 GM 用户名密码需要修改文件 /www/wwwroot/xy/gm/config.php
。
修改 $admin
和 $gmcode
即可修改 GM 的账号和密码,需要注意的是 $key
不可随意修改,如果修改需对应调整 gmkey
的值才能通过验证,而 gmkey
的值则是通过 md5($key)
得到。
2. 授权源码分析
GM 工具可以对游戏玩家进行 GM 授权,授权有两种,vip1 充值只能进行元宝充值,vip2 充值邮件可进行元宝充值和物品发送。那么在代码中它是如何实现的呢?我们打开 /gm/adminquery.php
文件。
首先会通过 $uid.$pwd.$key
三个字段拼接后用 md5 加密,然后将用户 $uid
作用 key,$pwd
、$vip
、$qu
作 value 以数组形式保存到文件中来储存 vip 用户的信息。
打开 vip1.json 可以看到保存的数据:
同样,被授权玩家通过 http://IP/gm/
打开玩家 GM 登录同样会读取 vip1.json
文件进行校验该用户是否为 vip 用户,所以玩家登录 GM 的密码和 GM 账号的密码一致为 123456,并非玩家账号的密码。
3. 使用域名访问
有好奇的小伙伴会发现我架设的游戏链接是 http://game.echeverra.cn,并不是 IP,这是因为之前的搭建的大天使之剑使用的就是 IP 形式,宝塔提示重复,所以使用的域名形式,而且域名看起来更加专业嘛~
改成域名访问也很简单,需要修改以下几处:
修改文件:
/www/wwwroot/xy/cdn/preload.js | |
/www/wwwroot/xy/cdn/index.min.html |
需要注意的是,使用域名路径后的 /cdn/
也省略掉。
接下来修改游戏网站,填写域名,根目录为 /www/wwwroot/xy/cdn/
。
因为游戏路径到 /cdn/
无法通过该域名访问上一级目录 /gm/
,所以我们还需要建一个 GM 的域名 gm.echeverra.cn
创建 GM 网站,目录为 /www/wwwroot/xy/gm/
,访问链接:http://gm.echeverra.cn。
4. 清空角色背包
游戏中难免会出现 GM 工具发送物品过多甚至爆号的情况,这时候可以通过数据库清空角色背包物品来解决。
- 首先要清空背包的角色,退出游戏。
- 通过宝塔,打开菜单数据库中的 phpMyAdmin 工具,并登陆。
- 找到库
gameserver
,点击上方 SQL 菜单,输入 sql 语句,其中账号替换为你的即可。` SELECT characterid,account FROM character
WHEREaccount
= ‘账号’` 点击执行后,记下查询到的
characterid
字段值。 - 再输入 sql 语句,其中
characterid
替换为你上一步查询到的即可。DELETE FROM item
WHEREcharacterid
= characterid点击执行,就成功删除了该角色的背包物品。
再次登陆游戏,你就会发现,角色的背包就空空如也啦~
5. 关于游戏 BUG
梦幻西游 H5 游戏已经试玩一段时间,发现存在战力溢出重大 BUG,总战力超过 42.9 亿就会溢出,战力又会重置变为很小的值,我首先想到的就是数据库战力字段设置的是 int 类型,因为 int 类型的上限正好是 4294967295,超过 42.9 亿多就无法正常存储,查看数据表果然是 int 类型。所以我将所有 int (10) 类型的字段都改为了 bigint (19),但经过测试,bug 还在,应该不只是数据库的问题。
于是我开始研究源码,因为后台核心部分的代码进行了加密,所以我只能修改配置 xml 文件,首先我想修改各属性对应的战力系数,对应文件 zhandouli.xml ,将各属性对应战力系数减少 5 倍,测试发现,激活神兵神甲宠物的战力依然提升之前的总战力,只是自身战力值变低,存在 bug。
既然不能修改战力系数,那索性就修改各模块的级数上限,通过研究游戏中战力的分布,我发现宠物和星图的战力占比最大,其他战力比较高的部分也一同调整:
- 修复等级上限 role.xml
- 修改属性丹数量上限 eduitem.xml
- 修改宠物阶级等级、宠物升级等级上限 pet.xml
- 修改星盘等级上限 chart.xml
- 修改图鉴等级上限 picture.xml
- 修改神兵神甲属性值,阶级上限 equip.xml
- 修改注灵等级上限 eduNote.xml
- 修改丹药使用数量上限 danyao.xml
修改完测试以上模块的战力确实小了,战力总和应该能控制在 20 亿多,但是又出现另一个 bug,连续快速点击升级会超出修改的等级上限,游戏 crash 掉… 就,很崩溃…
求助各大论坛,还有某宝上该游戏架设的商家,同样存在该 bug,并未修复。
后来也想过,西游类 H5 游戏那么多换一个就好了,架设了好几个都没有启动端口服务失败了,后来发现原来 centOs 8 不行,只能 centOs 7 版本服务器,这里还是要吐槽下游戏架设,环境真的很重要,php 版本、Linux 版本不一致就很有可能是架设失败的元凶,自己吃亏了很多回。再说回架设的其他西游类 H5 游戏,明显自己的服务器很吃力,负载 CPU 都是满的,游戏体验很差,所以只能放弃了。
很遗憾花了很长时间也没能修复好这个游戏,奈何工作生活精力有限,我不能再这上消耗太多的精力,如果身为大佬的你修复了这个 bug,请一定一定联系我…
6. 游戏 BUG 修复
喜大普奔,不知道奋战了多少个日日夜夜,我终于把 BUG 修复了,当然,其实就是换了个思路,游戏做了阉割版,但是并不影响游戏体验,Nice~
修改内容:
- 调整星盘等级;
- 调整图鉴等级;
- 调整宠物进阶等级;
- 调整神兵神甲等级;
- 调整结婚姻缘等级;
- 调整属性丹数量上限;
- 调整妖王副本等级限制;
- 调整西游之路等级限制;
- 其他游戏相关数据优化;
虽然还在测试中,但是就目前的阶段来看,战力上限大概控制在 20 亿左右,欢迎来我搭建的游戏中体验。由于修复该 BUG 花费了很大的心血,修复版我暂时不公开,先在手里捂一会,哈哈,有需要请单独联系我。
7. 游戏再次优化
我又又又又对游戏进行了优化和修复,对这个游戏情有独钟吧。本次优化了人物等级(180->300)、装备等级(180->250)、锻造等级 (180->200) 以及宠物等级(180->200),优化了物品数量上限,修复了一些概率性的报错,游戏基本已经很稳定了,欢迎大家来玩哦~
这个游戏我会一直一直维护下去的~