298 lines
9.8 KiB
TypeScript
298 lines
9.8 KiB
TypeScript
|
/**
|
|||
|
* 启动模块
|
|||
|
* 起始模块,初始化各个管理器,启动游戏主逻辑循环
|
|||
|
*/
|
|||
|
|
|||
|
import GameUtil from "./GameUtil";
|
|||
|
import PlayerMgr from "../object/PlayerMgr";
|
|||
|
import Signal from "./Signal";
|
|||
|
import NoticeMgr from "./NoticeMgr";
|
|||
|
import AgentMgr from "../network/AgentMgr";
|
|||
|
import LotteryMgr from "./LotteryMgr";
|
|||
|
import DialMgr from "./DialMgr";
|
|||
|
import ActivityMgr from "../activity/ActivityMgr";
|
|||
|
import BangMgr from "../bang/BangMgr";
|
|||
|
import ChargeSum from "./ChargeSum";
|
|||
|
import RelationMgr from "../object/RelationMgr";
|
|||
|
import PalaceFight from "../activity/PalaceFight";
|
|||
|
import MapMgr from "./MapMgr";
|
|||
|
import LevelMgr from "../object/LevelMgr";
|
|||
|
import GoodsMgr from "../item/GoodsMgr";
|
|||
|
import EquipMgr from "../object/EquipMgr";
|
|||
|
import MagicWeaponMgr from "../object/MagicWeaponMgr";
|
|||
|
import EffectMgr from "../skill/core/EffectMgr";
|
|||
|
import Shop from "../object/Shop";
|
|||
|
import World from "../object/World";
|
|||
|
import DWorld from "../object/DWorld";
|
|||
|
import NpcMgr from "./NpcMgr";
|
|||
|
import MonsterMgr from "./MonsterMgr";
|
|||
|
import MallMgr from "./MallMgr";
|
|||
|
import ZhenbukuiMgr from "../activity/ZhenbukuiMgr";
|
|||
|
import PaiHangMgr from "./PaiHangMgr";
|
|||
|
import SignInMgr from "./SignInMgr";
|
|||
|
import RespondentsMgr from "./RespondentsMgr";
|
|||
|
import PetMgr from "./PetMgr";
|
|||
|
import PartnerConfigMgr from "../object/PartnerConfigMgr";
|
|||
|
import TaskConfigMgr from "../task/TaskConfigMgr";
|
|||
|
import NpcConfigMgr from "./NpcConfigMgr";
|
|||
|
import SkillUtil from '../skill/core/SkillUtil';
|
|||
|
import SKLogger from '../gear/SKLogger';
|
|||
|
import BoxMgr from './BoxMgr';
|
|||
|
import DugMgr from '../role/DugMgr';
|
|||
|
import { MsgCode } from "../role/EEnum";
|
|||
|
import SchemeMgr from "../object/SchemeMgr";
|
|||
|
import RobotMgr from "./RobotMgr";
|
|||
|
import MailMgr from "../mail/MailMgr";
|
|||
|
import JingJiChang from "../activity/JingJiChang";
|
|||
|
import ChangeCard from "../object/ChangeCard";
|
|||
|
import SKRedisUtil from "../gear/SKRedisUtil";
|
|||
|
import FivePhases from "../object/FivePhases";
|
|||
|
import SatAssembly from "../activity/SatAssembly";
|
|||
|
import FactionWar from "../activity/FactionWar";
|
|||
|
import SpecialEffect from "../object/SpecialEffect";
|
|||
|
import PetSupport from "../object/PetSupport";
|
|||
|
import Ofuda from "../object/Ofuda";
|
|||
|
import DebrisMall from "./DebrisMall";
|
|||
|
import Interface from "./Interface";
|
|||
|
import OnlineRewards from "../activity/OnlineRewards";
|
|||
|
import Currency from "../activity/Currency";
|
|||
|
import Marry from "../object/Marry";
|
|||
|
import TianTi from "../activity/TianTi";
|
|||
|
import JIngChanSongFuMgr from "../JingChanSongFu/JIngChanSongFuMgr";
|
|||
|
|
|||
|
export default class Launch {
|
|||
|
static shared = new Launch();
|
|||
|
// 完成列表
|
|||
|
completeList: any = {
|
|||
|
["BangMgr"]: false,
|
|||
|
["PaiHangMgr"]: false,
|
|||
|
["ChargeSum"]: false,
|
|||
|
["MailMgr"]: false,
|
|||
|
["SignInMgr"]: false,
|
|||
|
["RespondentsMgr"]: false,
|
|||
|
};
|
|||
|
// 服务存档列表
|
|||
|
saveList: any = [
|
|||
|
Shop,
|
|||
|
];
|
|||
|
|
|||
|
saved: number = 0;
|
|||
|
dt: number;
|
|||
|
|
|||
|
constructor() {
|
|||
|
// 每秒4帧
|
|||
|
GameUtil.frameTime = 1000 / 4;
|
|||
|
// 主逻辑循环
|
|||
|
this.dt = 0;
|
|||
|
}
|
|||
|
|
|||
|
mainloop() {
|
|||
|
if (isNaN(this.dt)) {
|
|||
|
// 每秒4帧
|
|||
|
GameUtil.frameTime = 1000 / 4;
|
|||
|
// 主逻辑循环
|
|||
|
this.dt = 0;
|
|||
|
}
|
|||
|
this.dt += GameUtil.frameTime;
|
|||
|
// 内部通信循环
|
|||
|
Signal.shared.update(this.dt);
|
|||
|
AgentMgr.shared.update(this.dt);
|
|||
|
NoticeMgr.shared.update(GameUtil.frameTime);
|
|||
|
PlayerMgr.shared.update(this.dt);
|
|||
|
LotteryMgr.shared.update(this.dt);
|
|||
|
ActivityMgr.shared.update(this.dt);
|
|||
|
PalaceFight.shared.update(GameUtil.frameTime);
|
|||
|
RelationMgr.shared.update(this.dt);
|
|||
|
GameUtil.gameTime += GameUtil.frameTime;
|
|||
|
// 1分钟校正
|
|||
|
if (this.dt % (1 * 60 * 1000) == 0) {
|
|||
|
GameUtil.gameTime = Date.now();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
start() {
|
|||
|
GameUtil.gameTime = Date.now();
|
|||
|
setInterval(this.mainloop, GameUtil.frameTime);
|
|||
|
// 通知模块
|
|||
|
NoticeMgr.shared.launch();
|
|||
|
SKLogger.info('通知模块初始化完毕!');
|
|||
|
// 地图模块
|
|||
|
MapMgr.shared.launch();
|
|||
|
SKLogger.info('地图模块加载完毕!');
|
|||
|
// 任务配置
|
|||
|
TaskConfigMgr.shared.launch();
|
|||
|
SKLogger.info('任务配置模块加载完毕!');
|
|||
|
// 地煞天元模块
|
|||
|
World.shared.launch();
|
|||
|
DWorld.shared.init();
|
|||
|
SKLogger.info('地煞天元模块加载完毕!');
|
|||
|
// 证道大会模块
|
|||
|
SatAssembly.shared.init();
|
|||
|
SKLogger.info('证道模块加载完毕!');
|
|||
|
// NPC配置
|
|||
|
NpcConfigMgr.shared.launch();
|
|||
|
SKLogger.info('Npc配置模块加载完毕!');
|
|||
|
// NPC
|
|||
|
NpcMgr.shared.launch();
|
|||
|
SKLogger.info('Npc模块加载完毕!');
|
|||
|
// 玩家模块
|
|||
|
PlayerMgr.shared.launch();
|
|||
|
SKLogger.info('角色属性模块加载完毕!');
|
|||
|
GoodsMgr.shared.launch();
|
|||
|
SKLogger.info('物品模块加载完毕!');
|
|||
|
// 经验模块
|
|||
|
LevelMgr.shared.launch();
|
|||
|
SKLogger.info('经验模块加载完毕!');
|
|||
|
// 技能模块
|
|||
|
SkillUtil.launch();
|
|||
|
SKLogger.info('技能模块加载完毕!');
|
|||
|
// 技能效果模块
|
|||
|
EffectMgr.shared.launch();
|
|||
|
SKLogger.info('技能效果模块加载完毕!');
|
|||
|
// 装备模块
|
|||
|
EquipMgr.shared.launch();
|
|||
|
// 法宝模块
|
|||
|
MagicWeaponMgr.shared.launch();
|
|||
|
// 帮派模块
|
|||
|
BangMgr.shared.launch();
|
|||
|
// 怪物模块
|
|||
|
MonsterMgr.shared.launch();
|
|||
|
SKLogger.info('怪物模块加载完毕!');
|
|||
|
// 商城模块
|
|||
|
MallMgr.shared.init();
|
|||
|
SKLogger.info('商城模块加载完毕!');
|
|||
|
// 碎片模块
|
|||
|
DebrisMall.shared.init();
|
|||
|
SKLogger.info('碎片商城模块加载完毕!');
|
|||
|
//甄不亏模块
|
|||
|
ZhenbukuiMgr.shared.init();
|
|||
|
SKLogger.info('甄不亏模块加载完毕!');
|
|||
|
// 摆摊模块
|
|||
|
Shop.shared.init();
|
|||
|
SKLogger.info('摆摊模块加载完毕!');
|
|||
|
// 排行榜模块
|
|||
|
PaiHangMgr.shared.init();
|
|||
|
ChangeCard.shared.init();
|
|||
|
SpecialEffect.shared.init();
|
|||
|
FivePhases.shared.init();
|
|||
|
PetSupport.shared.init();
|
|||
|
Ofuda.shared.init();
|
|||
|
//竞技场
|
|||
|
JingJiChang.shared.init();
|
|||
|
// 签到模块
|
|||
|
SignInMgr.shared.init();
|
|||
|
// 答题模块
|
|||
|
RespondentsMgr.shared.init();
|
|||
|
// 宠物模块
|
|||
|
PetMgr.shared.launch();
|
|||
|
SchemeMgr.launch();
|
|||
|
// 充值总额模块
|
|||
|
ChargeSum.shared.init();
|
|||
|
// 伙伴模块
|
|||
|
PartnerConfigMgr.shared.init();
|
|||
|
SKLogger.info('伙伴管理模块加载完毕!');
|
|||
|
// 活动模块
|
|||
|
ActivityMgr.shared.init();
|
|||
|
SKLogger.info('活动模块加载完毕!');
|
|||
|
// 开箱模块
|
|||
|
BoxMgr.shared.init();
|
|||
|
SKLogger.info(`开箱模块加载完毕`);
|
|||
|
// 挖宝模块
|
|||
|
DugMgr.shared.init();
|
|||
|
SKLogger.info(`挖宝模块加载完毕`);
|
|||
|
// 彩票模块
|
|||
|
LotteryMgr.shared.init();
|
|||
|
SKLogger.info('彩票模块加载完毕!');
|
|||
|
// 幸运转盘
|
|||
|
DialMgr.shared.init();
|
|||
|
SKLogger.info('幸运转盘模块加载完毕!');
|
|||
|
//关系模块
|
|||
|
RelationMgr.shared.init();
|
|||
|
SKLogger.info(`关系模块加载完毕`);
|
|||
|
// 创建机器人
|
|||
|
RobotMgr.shared.init();
|
|||
|
SKLogger.info(`机器人模块加载完毕`);
|
|||
|
MailMgr.shared.launch();
|
|||
|
// 帮战模块
|
|||
|
FactionWar.shared.init();
|
|||
|
SKLogger.info('帮战模块加载完毕!');
|
|||
|
// 在线奖励模块
|
|||
|
OnlineRewards.shared.init();
|
|||
|
SKLogger.info('在线奖励模块加载完毕!');
|
|||
|
// 打金模块
|
|||
|
Currency.shared.init();
|
|||
|
SKLogger.info('打金模块加载完毕!');
|
|||
|
// 白名单模块
|
|||
|
Interface.shared.init();
|
|||
|
SKLogger.info('白名单模块加载完毕!');
|
|||
|
// 结婚模块
|
|||
|
Marry.shared.init();
|
|||
|
|
|||
|
TianTi.shared.init();
|
|||
|
SKLogger.info("天梯模块启动完毕")
|
|||
|
|
|||
|
JIngChanSongFuMgr.shared.launch();
|
|||
|
SKLogger.info(`金蟾送服模块启动完毕`);
|
|||
|
//启动Redis管理模块
|
|||
|
// SKRedisUtil.launch();
|
|||
|
// SKLogger.info(`Redis模块启动完毕`);
|
|||
|
};
|
|||
|
|
|||
|
checkAllComplete() {
|
|||
|
for (let key in this.completeList) {
|
|||
|
if (this.completeList[key] == false) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
complete(mod: any) {
|
|||
|
this.completeList[mod] = true;
|
|||
|
SKLogger.info(`模块[${mod}]加载完成!`);
|
|||
|
if (this.checkAllComplete()) {
|
|||
|
// 连接代理模块
|
|||
|
AgentMgr.shared.start();
|
|||
|
// 向Gate服注册
|
|||
|
Signal.shared.registerServer();
|
|||
|
SKLogger.info('游戏服务器启动完毕,等待命令');
|
|||
|
}
|
|||
|
}
|
|||
|
// 全部存档
|
|||
|
saveAll(callback: (code: number) => void) {
|
|||
|
this.saved = 0;
|
|||
|
let self = this;
|
|||
|
PlayerMgr.shared.saveAll(() => {
|
|||
|
for (let key in self.saveList) {
|
|||
|
let mgr = self.saveList[key];
|
|||
|
mgr.saveAll((msg: string) => {
|
|||
|
SKLogger.info(`全部存档:${msg}`);
|
|||
|
self.saved++;
|
|||
|
if (self.saved == self.saveList.length) {
|
|||
|
callback(MsgCode.SUCCESS);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
// 关服
|
|||
|
close(callback: (code: number) => void) {
|
|||
|
PlayerMgr.shared.readyToCloseServer();
|
|||
|
let self = this;
|
|||
|
setTimeout(() => {
|
|||
|
self.saveAll((code: number) => {
|
|||
|
AgentMgr.shared.close();
|
|||
|
ActivityMgr.shared.close();
|
|||
|
callback(code);
|
|||
|
});
|
|||
|
}, 12 * 1000);
|
|||
|
};
|
|||
|
// 是否关闭
|
|||
|
isClose(): boolean {
|
|||
|
if (this.saved == this.saveList.length) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|