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++; } } } } } }