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