- 精华
- 阅读权限
- 60
- 好友
- 相册
- 分享
- 听众
- 收听
- 注册时间
- 2022-3-25
- 在线时间
- 小时
- 最后登录
- 1970-1-1
|
本帖最后由 theNewOne1 于 2023-11-5 17:55 编辑
这个 大话西游 有好多个变种版本,本文章也可能适用于其他名字的端
(ps 论坛这个端网页后台文件缺失,看了看发现有游戏内调用GM)
1.角色GM等级修改
搭建完毕,建好角色后进入游戏,点头像看自己的角色ID,下面用
登录虚拟机(账号密码 附带的搭建说明里面有)
输入命令如下
提示输入密码
进入mysql输入界面,输入如下sql (10000005 改成你的角色ID)
(数据库 xy_ga 可能叫其他名字,改成你的就行)
- show databases;
- use xy_ga;
- update qy_role t set t.gmlevel = '999' where t.roleid = '10000005';
- commit;
复制代码
2.服务端文件修改(二选一:可以用修改好的文件直接替换,也可以自己修改替换)
省流版(直接替换服务端文件就行了,游戏里组个队伍,在 队伍频道 里输入GM命令)
additem 物品ID 物品数量 接收人ID(为空就是自己,结尾需要加个空格)
例如 给角色ID为 10000005 的用户添加 1 个ID为30006的物品(最后有全物品ID,在数据库 game_goods 表中)
additem 30006 1 10000005
additem 30006 1
----------------------------------
给当前人物增加经验 999
addexp 999
---------------修改好的两个文件---------------
---------------修改好的两个文件---------------
将修改好的2个文件分别替换如下路径的文件
home\xy-server\game\object\Player.ts
home\xy-server\game\network\Agent.ts
修改步骤版(想自己修改的看这里,上面文件就是按照如下步骤修改的)
找到并打开服务端文件
home\xy-server\game\object\Player.ts
首先搜索 清理背包
- // 清理背包
- clear_bag(msg: string) {
- // if (msg == "清理背包"){
- // this.bag_list = {}
- // this.send('s2c_bagitem', {
- // info: SKDataUtil.toJson(this.bag_list, "{}")
- // });
- // }
- if (msg == "分解配饰") {
- this.clear_acc(2);
- } else if (msg == "打开五行礼包") {
- this.openGoods("50033");
- } else if (msg == "打开高级技能书礼包") {
- this.openGoods("50014");
- } else if (msg == "打开八阵图礼包") {
- ...代码省略...
复制代码
我们在方法开始定义如下几个变量(additem可以改成你喜欢的名字 后面使用该命令同步修改就行)
- let addItemCmd = /additem/gi;
- let addExpCmd = /addexp/gi;
- let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid);
复制代码
改成如下代码
- // 清理背包
- clear_bag(msg: string) {
- // if (msg == "清理背包"){
- // this.bag_list = {}
- // this.send('s2c_bagitem', {
- // info: SKDataUtil.toJson(this.bag_list, "{}")
- // });
- // }
- let addItemCmd = /additem/gi;
- let addExpCmd = /addexp/gi;
- let player = PlayerMgr.shared.getPlayerByRoleId(this.roleid);
- if (msg == "分解配饰") {
- this.clear_acc(2);
- } else if (msg == "打开五行礼包") {
- this.openGoods("50033");
- } else if (msg == "打开高级技能书礼包") {
- this.openGoods("50014");
- } else if (msg == "打开八阵图礼包") {
复制代码
然后搜索 退出本次战斗
应该是如下代码块
- ...代码省略...
- else if (msg == "退出本次战斗") {
- if(this.battle_id > 0){
- this.wgjccs = 0;
- let battle = BattleMgr.shared.getBattle(this.battle_id);
- if(battle.battle_type != BattleType.Force && battle.battle_type != BattleType.PK && battle.battle_type != BattleType.ShuiLu && battle.battle_type != BattleType.AREAN && battle.battle_type != BattleType.Sat){
- if(this.teamid > 0){
- if (this.isleader){
- BattleMgr.shared.destroyBattle(this.battle_id)
- }else {
- this.send_notice("您不是队长!");
- }
- }else {
- BattleMgr.shared.destroyBattle(this.battle_id)
- }
- }
- }
- }
- }
复制代码 我们在最后一个 else if 后面加入新的代码(随便一个else if 都行)
改成如下代码
- else if (msg == "退出本次战斗") {
- if(this.battle_id > 0){
- this.wgjccs = 0;
- let battle = BattleMgr.shared.getBattle(this.battle_id);
- if(battle.battle_type != BattleType.Force && battle.battle_type != BattleType.PK && battle.battle_type != BattleType.ShuiLu && battle.battle_type != BattleType.AREAN && battle.battle_type != BattleType.Sat){
- if(this.teamid > 0){
- if (this.isleader){
- BattleMgr.shared.destroyBattle(this.battle_id)
- }else {
- this.send_notice("您不是队长!");
- }
- }else {
- BattleMgr.shared.destroyBattle(this.battle_id)
- }
- }
- }
- }else if (addItemCmd.test(msg)) {
- // 加道具 给自己发送结尾空格 加上id(可以是自己的)可以给别人发
- // additem 30006 1 10000005
- // additem 30006 1 (ps:给自己发不用写id 最后需要有个空格)
- let commandstr = msg.toString();
- let commands = commandstr.split(' ');
- GMMgr.shared.addItem(player,commands);
- } else if (addExpCmd.test(msg)) {
- //加经验 位数要小于10位
- // addexp 10000
- let commandstr2 = msg.toString();
- let commands2 = commandstr2.split(' ');
- GMMgr.shared.addExp(player,commands2);
- }
- }
复制代码
然后重启服务,在世界频道发送指令(原来有几个命令 点开左侧图标 成长 页面上的)
- ----------------------------------
- additem 物品ID 物品数量 接收人ID(为空就是自己,结尾需要加个空格)
- 例如 给角色ID为 10000005 的用户添加 1 个ID为30006的物品(最后有全物品ID,在数据库 game_goods 表中)
- additem 30006 1 10000005
- additem 30006 1
- ----------------------------------
- 给当前人物增加经验 999
- addexp 999
- ----------------------------------
- ...还有加属性的没有写了,可以仿照着上面的续写,部分指令逻辑在
- xy-server\game\core\GMMgr.ts 这个文件中,大概就是接收频道消息然后去调用GM逻辑
复制代码
3.附加(这里是改成接收队伍消息,可选)
上面的默认是接收世界频道的消息,但是世界频道你发命令谁都能看见,所以我们改一下
找到并打开文件
home\xy-server\game\network\Agent.ts
搜索 聊天间隔不足10秒
大概如下代码
- let roleList = TeamMgr.shared.getTeamPlayer(player.teamid);
- // CXF 通讯记录
- SKCxfUtil.getCxfRecordMsg({
- roleId: this.roleId,
- roleName: this.roleName,
- msg: msg,
- type: Channel.TEAM,
- zoneSerial: GameUtil.serverId
- })
- for (let p of roleList) {
- p.send('s2c_game_chat', data);
- }
- } else {
- let t = Date.now();
- if (t - player.lastWorldChatTime < 10 * 1000) {
- player.send('s2c_notice', {
- strRichText: '聊天间隔不足10秒'
- });
- return;
- }
复制代码
加一个调用,改成如下代码
- let roleList = TeamMgr.shared.getTeamPlayer(player.teamid);
- // CXF 通讯记录
- SKCxfUtil.getCxfRecordMsg({
- roleId: this.roleId,
- roleName: this.roleName,
- msg: msg,
- type: Channel.TEAM,
- zoneSerial: GameUtil.serverId
- })
- //这一句是新增加的
- player.clear_bag(msg);
- for (let p of roleList) {
- p.send('s2c_game_chat', data);
- }
- } else {
- let t = Date.now();
- if (t - player.lastWorldChatTime < 10 * 1000) {
- player.send('s2c_notice', {
- strRichText: '聊天间隔不足10秒'
- });
- return;
- }
复制代码 然后就可以在 队伍频道 使用GM命令了
4.附录 物品ID(数据库 game_goods 表中)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|