182 lines
5.9 KiB
TypeScript
182 lines
5.9 KiB
TypeScript
import DB from "../utils/DB";
|
||
import Player from "../object/Player";
|
||
import PlayerMgr from "../object/PlayerMgr";
|
||
import RoleUtil from "../utils/RoleUtil";
|
||
import AIMgr from "./AIMgr";
|
||
import SKDataUtil from "../gear/SKDataUtil";
|
||
import * as schedule from "node-schedule";
|
||
import {MsgCode} from "../role/EEnum";
|
||
import TeamMgr from "../core/TeamMgr";
|
||
import ChargeSum from "../core/ChargeSum";
|
||
|
||
export default class RobotMgr {
|
||
static shared: RobotMgr = new RobotMgr();
|
||
flag: number = 9000000;
|
||
maxId: number = 0;
|
||
total: number = 0;
|
||
missNum: number = 0; // 错过次数
|
||
face: any = []; // 表情
|
||
|
||
init() {
|
||
this.face = ["[50]","[51]","[52]","[53]","[51]","[54]","[51]","[55]"]
|
||
// schedule.scheduleJob("0/30 * * * * ? ", () => {
|
||
// this.getRobotMsg();
|
||
// })
|
||
}
|
||
// 上线就创建
|
||
launch() {
|
||
if (this.total == 0) {
|
||
return;
|
||
}
|
||
let self = this;
|
||
DB.readRobots(this.total, (rows: any) => {
|
||
for (let row of rows) {
|
||
let robot = new Player();
|
||
robot.setDB(row);
|
||
robot.ai = new AIMgr(robot);
|
||
PlayerMgr.shared.addPlayer(robot);
|
||
robot.onEnterMap();
|
||
self.maxId++;
|
||
}
|
||
if (self.maxId < this.total) {
|
||
for (let i = self.maxId; i < this.total; i++) {
|
||
this.createRobot();
|
||
}
|
||
}
|
||
});
|
||
|
||
}
|
||
// 创建机器人
|
||
createRobot() {
|
||
let robot: Player = new Player();
|
||
robot.roleid = SKDataUtil.rolePrimaryKey(8);
|
||
robot.onlyid = robot.roleid;
|
||
robot.accountid = robot.roleid;
|
||
RoleUtil.randomRole(robot);
|
||
PlayerMgr.shared.addPlayer(robot);
|
||
robot.onEnterMap();
|
||
}
|
||
|
||
// 机器人数量
|
||
robotTotal(): number {
|
||
let result: number = 0;
|
||
let roleList = PlayerMgr.shared.player_role_list;
|
||
for (let key in roleList) {
|
||
let roleId = SKDataUtil.numberBy(key);
|
||
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
|
||
if (player.isRobot()) {
|
||
continue;
|
||
}
|
||
result++;
|
||
}
|
||
return result
|
||
}
|
||
|
||
// 创建机器人
|
||
createRobotOn(num: number, callback: (code: number, count: number) => void) {
|
||
this.total += num;
|
||
let count = 0;
|
||
let self = this;
|
||
DB.readRobots(num, (rows: any) => {
|
||
for (let row of rows) {
|
||
let robot = new Player();
|
||
robot.onlyid = row.roleid;
|
||
robot.accountid = row.roleid;
|
||
RoleUtil.createDataRobot(robot,row);
|
||
PlayerMgr.shared.addPlayer(robot);
|
||
robot.onEnterMap();
|
||
self.maxId++;
|
||
}
|
||
if (self.maxId < num) {
|
||
for (let i = self.maxId; i < num; i++) {
|
||
this.createRobot();
|
||
count++;
|
||
}
|
||
}
|
||
callback(MsgCode.SUCCESS, count);
|
||
});
|
||
}
|
||
|
||
// 清空机器人
|
||
remoteAllRobot(num: number, callback: (code: number, count: number) => void) {
|
||
this.total -= num;
|
||
if (this.total < 0){
|
||
this.total = 0;
|
||
}
|
||
let count = 0;
|
||
let roleList: any = PlayerMgr.shared.player_role_list;
|
||
for (let key in roleList) {
|
||
if (count >= num){
|
||
continue;
|
||
}else {
|
||
let player = roleList[key];
|
||
if (player) {
|
||
if (player.isRobot()) {
|
||
player.destroy();
|
||
PlayerMgr.shared.delPlayer(key);
|
||
count++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
callback(MsgCode.SUCCESS, count);
|
||
};
|
||
|
||
getRobotMsg(){
|
||
if (this.total > 10){
|
||
if (Math.floor(Math.random() * 10) + 1 > 5 || this.missNum > 60){
|
||
this.missNum = 0;
|
||
let roleList: any = PlayerMgr.shared.player_role_list;
|
||
for (let key in roleList) {
|
||
let player = roleList[key];
|
||
if (player) {
|
||
if (player.isRobot()) {
|
||
let msg = "";
|
||
let count = Math.floor(Math.random() * 3) + 1;
|
||
for (let i = 0; i < count; i++) {
|
||
let index = Math.floor((Math.random() * this.face.length));
|
||
msg += this.face[index];
|
||
}
|
||
let data: any = {};
|
||
data.scale = 0;
|
||
data.msg = msg;
|
||
data.name = player.name;
|
||
data.resid = player.resid;
|
||
data.roleid = player.roleid;
|
||
data.onlyid = player.onlyid;
|
||
data.voice = new Uint8Array(data.voice);
|
||
data.relive = player.relive;
|
||
data.chargesum = ChargeSum.shared.getPlayerChargeSum(player.roleid);
|
||
PlayerMgr.shared.broadcast('s2c_game_chat', data);
|
||
}
|
||
}
|
||
}
|
||
}else {
|
||
this.missNum += 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
robotPutInTeam(teamId: any){
|
||
let count = 1;
|
||
//输出0~10之间的随机整数
|
||
let num: number = 10 * Math.random();
|
||
let roleList: any = PlayerMgr.shared.player_role_list;
|
||
|
||
for (let key in roleList) {
|
||
if (count >= num){
|
||
continue;
|
||
}else {
|
||
let player = roleList[key];
|
||
if (player) {
|
||
if (player.isRobot()) {
|
||
TeamMgr.shared.requestTeam(player,teamId);
|
||
count++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
} |