xy-server/game/core/GMMgr.ts
2025-04-23 09:34:08 +08:00

357 lines
9.1 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import GameUtil from "./GameUtil";
import Signal from "./Signal";
import GoodsMgr from "../item/GoodsMgr";
import PlayerMgr from "../object/PlayerMgr";
import DB from "../utils/DB";
import Http from "../utils/Http";
import ActivityMgr from "../activity/ActivityMgr";
import ActivityDefine from "../activity/ActivityDefine";
import HongBao from "../activity/HongBao";
import ShuiLuDaHui from "../activity/ShuiLuDaHui";
import LingHou from "../activity/LingHou";
import ChongZhi from "../activity/ChongZhi";
import NpcMgr from "./NpcMgr";
import Player from "../object/Player";
import ItemUtil from "./ItemUtil";
import SKDataUtil from "../gear/SKDataUtil";
import SKLogger from "../gear/SKLogger";
import { BattleType, MsgCode } from "../role/EEnum";
import GameConf from "../../conf/GameConf";
export default class GMMgr {
static shared = new GMMgr();
list: any = {
['fight']: this.fight,
['add_exp']: this.addExp,
['add_item']: this.addItem,
['attr']: this.changeAttr,
['freeze']: this.freeze,
['activity']: this.activity,
['shutup']: this.LetPlayerShutUp,
['speak']: this.letPlayerSpeak,
['mon']: this.createMonster,
['robot']: this.createRobot,
};
exec(player: any, command: any) {
let func = this.list[command[0]];
if (func) {
func(player, command);
}
}
fight(player: any, command: any) {
if (GameUtil.netType == 'InSide' || (player && player.gmlevel >= 1)) {
if (player) {
let groupid = parseInt(command[1]);
player.monsterBattle(groupid, 0, BattleType.Normal, true);
}
}
}
addExp(player: any, command: any) {
if (GameUtil.netType == 'InSide' || (player && player.gmlevel >= 20)) {
let expstr = command[1] + '';
if (expstr.length >= 10) {
if (player) {
player.send('s2c_notice', {
strRichText: '大兄弟GM指令不能乱用'
});
}
return;
}
let exp = parseInt(expstr);
player.addExp(exp);
}
}
freeze(player: any, command: any) {
let userid = command[1];
if (GameUtil.netType == 'InSide' || (player && player.gmlevel > 10)) {
try {
let uid = parseInt(userid);
let target = PlayerMgr.shared.getPlayerByRoleId(uid);
if (target) {
player.send('s2c_notice', {
strRichText: '被GM 踢下线!'
});
setTimeout(() => {
target.agent.close();
}, 1000);
}
} catch (error) {
}
}
}
FreezePlayer(pGmPlayer: any, nTargetID: any) {
if (null == pGmPlayer)
return;
if (pGmPlayer.gmlevel < 10) {
return;
}
let pTarget = PlayerMgr.shared.getPlayerByRoleId(nTargetID);
if (null == pTarget)
return;
pGmPlayer.send('s2c_notice', {
strRichText: '封号成功'
});
let sql = `UPDATE qy_account SET state= 1 where accountid = ${pTarget.accountid}`;
DB.query(sql, (ret: any, rows: any) => { });
Signal.shared.DeleteTocken(pTarget.accountid);
setTimeout(() => {
// pTarget.agent.destroy();
pTarget.destroy();
}, 1000);
}
FreezePlayerIP(pGmPlayer: any, nTargetID: any) {
this.FreezePlayer(pGmPlayer, nTargetID);
if (null == pGmPlayer)
return;
if (pGmPlayer.gmlevel < 15) {
return;
}
let pTarget = PlayerMgr.shared.getPlayerByRoleId(nTargetID);
if (null == pTarget)
return;
DB.freezeIP(pTarget.accountid, (ret: any, ip: any) => {
if (ret == MsgCode.SUCCESS) {
pGmPlayer.send('s2c_notice', {
strRichText: '封IP成功'
});
if (ip == 0) {
return;
}
// 向网关请求
Http.sendget(GameConf.gate_ip, GameConf.gate_port, '/frozen_ip', {
frozenip: ip
}, () => { });
let str = `玩家[${pGmPlayer.name}:${pGmPlayer.roleid}]使用GM命令封了[${pTarget.accountid}]的IP[${ip}]`;
console.log(str);
} else {
// pGmPlayer.send('s2c_notice', {
// strRichText: '封IP失败'
// });
}
});
}
FreezePlayerMAC(pGmPlayer: any, nTargetID: any) {
if (null == pGmPlayer)
return;
if (pGmPlayer.gmlevel < 30) {
return;
}
let pTarget = PlayerMgr.shared.getPlayerByRoleId(nTargetID);
if (null == pTarget)
return;
// 向网关请求
Http.sendget(GameConf.gate_ip, GameConf.gate_port, '/frozen_mac', {
accountid: pTarget.accountid,
gmRoleid: pGmPlayer.roleid
}, () => { });
let str = `玩家[${pGmPlayer.name}:${pGmPlayer.roleid}]使用GM命令封了[${pTarget.accountid}]的MAC `;
console.log(str);
}
LetPlayerShutUp(pGmPlayer: any, nTargetID: any) {
if (null == pGmPlayer)
return;
if (pGmPlayer.gmlevel < 1) {
return;
}
let pTarget = PlayerMgr.shared.getPlayerByRoleId(nTargetID);
if (null == pTarget)
return;
pTarget.SetFlag(GameUtil.EPlayerFlag.EBanSpeak, 1);
pGmPlayer.send('s2c_notice', {
strRichText: '禁言成功'
});
PlayerMgr.shared.broadcast('s2c_game_chat', {
scale: 5,
msg: '',
name: '',
resid: 0,
teamid: 0,
roleid: nTargetID,
});
}
letPlayerSpeak(pGmPlayer: any, nTargetID: any) {
if (null == pGmPlayer)
return;
if (pGmPlayer.gmlevel < 1) {
return;
}
let pTarget = PlayerMgr.shared.getPlayerByRoleId(nTargetID);
if (null == pTarget)
return;
pTarget.SetFlag(GameUtil.EPlayerFlag.EBanSpeak, 0);
pGmPlayer.send('s2c_notice', {
strRichText: '解禁成功'
});
pTarget.send('s2c_notice', {
strRichText: '成功解禁发言'
});
}
can_speak = (nPlayer: any, nBan: any) => {
let pTarget = PlayerMgr.shared.getPlayerByRoleId(nPlayer);
if (null == pTarget)
return;
pTarget.SetFlag(GameUtil.EPlayerFlag.EBanSpeak, nBan);
}
// 加道具 [addItem,道具索引或道具名称,道具数量,玩家索引]
addItem(player: Player, command: string[]) {
if (player == null || player.gmlevel < 100) {
SKLogger.debug(`加道具:玩家不存在或GM权限不足!`);
return;
}
// GM命令参数不能少于4个
if (command.length < 4) {
SKLogger.debug(`加道具:参数不能少于4个`);
return;
}
// 有GM权限
if (player && player.gmlevel >= 100) {
let item = command[1];
let itemnum = SKDataUtil.numberBy(command[2]);
let targetid = parseInt(command[3]);
let itemid = parseInt(item);
if (isNaN(itemid)) {
let iteminfo = ItemUtil.getItemData(item);
if (iteminfo) {
itemid = iteminfo.id;
} else {
SKLogger.debug(`加道具:道具[${item}]不存在,无法发送`);
return;
}
}
if (itemid != 0) {
if (targetid && targetid != 0) {
let target = PlayerMgr.shared.getPlayerByRoleId(targetid);
if (target) {
let info = `加道具:玩家[${player.name}:${player.roleid}]使用GM命令给玩家[${target.name}${target.roleid}]添加${itemnum}个物品[${itemid}]`;
target.addItem(itemid, itemnum, true, info);
}
} else {
let info = `加道具:玩家[${player.name}:${player.roleid}]使用GM命令给自己添加${itemnum}个物品[${itemid}]`;
player.addItem(itemid, itemnum, true, info);
}
}
}
}
changeAttr(player: Player, command: any) {
if (GameUtil.netType == 'InSide' || (player && player.gmlevel >= 2)) {
let attrtype = command[1];
let attr = command[2];
if (GameUtil.attrTypeStrL1[attrtype] == null) {
return;
}
try {
let num = attr;
if (num.length > 10) {
return;
}
num = parseInt(num);
player.setAttr1(attrtype, num);
player.send('s2c_player_data', player.getData());
} catch (error) {
}
}
}
activity(player: any, command: any) {
if (GameUtil.netType == 'InSide' || (player && player.gmlevel >= 100)) {
let activity_id = parseInt(command[1]);
let isopen = parseInt(command[2]); // 0 关闭 1 开启
let activity = ActivityMgr.shared.getActivity(activity_id);
if (activity) {
if (isopen == 0) {
activity.close();
}
else {
activity.gmState(isopen);
}
}
else {
if (isopen == 1) {
let newactivity = null;
switch (activity_id) {
case ActivityDefine.activityKindID.HongBao: {
newactivity = new HongBao();
} break;
case ActivityDefine.activityKindID.ShuiLuDaHui: {
newactivity = new ShuiLuDaHui();
} break;
case ActivityDefine.activityKindID.TianJiangLingHou: {
newactivity = new LingHou();
} break;
}
if (newactivity) {
if (newactivity.gmState) {
ActivityMgr.shared.addActivity(newactivity);
activity.gmState(isopen);
}
}
}
}
}
}
/*
* 设置充值活动
* @param start 开始时间
* @param end 结束时间
*/
setChargeActivity(start: any, end: any) {
let activity_id = ActivityDefine.activityKindID.ChongZhi;
let activity = ActivityMgr.shared.getActivity(activity_id);
if (!activity) {
activity = new ChongZhi();
ActivityMgr.shared.addActivity(activity);
}
activity.setActivityTm(start, end);
}
/*
* 关闭充值活动
*/
closeChargeActivity() {
let activity_id = ActivityDefine.activityKindID.ChongZhi;
let activity = ActivityMgr.shared.getActivity(activity_id);
if (activity == null) {
SKLogger.debug('关闭充值活动:未发现充值活动!');
return;
}
activity.close();
}
createMonster(player: any, command: any) {
if (GameUtil.netType == 'InSide' || (player && player.gmlevel >= 100)) {
let npcid = parseInt(command[1]);
NpcMgr.shared.CreateNpc(npcid, player.mapid, player.x, player.y);
}
}
createRobot(player: any, command: any) {
}
}