357 lines
9.1 KiB
TypeScript
357 lines
9.1 KiB
TypeScript
|
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) {
|
|||
|
}
|
|||
|
}
|