xy-server/game/core/GMMgr.ts

357 lines
9.1 KiB
TypeScript
Raw Permalink Normal View History

2025-04-23 09:34:08 +08:00
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) {
}
}