xy-server/game/object/MagicWorldMgr.ts
2025-04-23 09:34:08 +08:00

180 lines
5.0 KiB
TypeScript

import WorldStar from "./WorldStar";
import NpcMgr from "../core/NpcMgr";
import PlayerMgr from "./PlayerMgr";
import SatAssembly from "../activity/SatAssembly";
import SKLogger from "../gear/SKLogger";
import SKDataUtil from "../gear/SKDataUtil";
// 逐鹿恶鬼
export default class MagicWorldMgr {
private static _shared: MagicWorldMgr;
static get shared(): MagicWorldMgr {
if (!this._shared) {
this._shared = new MagicWorldMgr();
}
return this._shared;
}
vecMagic: any[];
refresh_timer: any;
constructor() {
this.vecMagic = [];
this.refresh_timer = 0;
}
IsMagic(nOnlyID: any): boolean {
for (let it in this.vecMagic) {
let pStar = this.vecMagic[it];
if (pStar.nOnlyID == nOnlyID)
return true;
}
return false;
}
onCreateWorldMagic(count: number) {
this.vecMagic = [];
this.refresh_timer = setTimeout(() => {
this.refresh_timer = 0;
this.checkAndCreateWordMagic(count);
}, 60 * 1000);
this.checkAndCreateWordMagic(count);
}
FindStar(nOnlyID: any): any {
for (let it in this.vecMagic) {
if (this.vecMagic[it].nOnlyID == nOnlyID)
return this.vecMagic[it];
}
console.log("未找到恶鬼ID=",SKDataUtil.toJson(this.vecMagic,"[]"))
return null;
}
// 发起挑战
ApplyChallenge(nNpcOnlyID: any, roleId: any): number {
let pBomb = this.FindStar(nNpcOnlyID);
if (null == pBomb) {
return 1;
}
if (pBomb.vecApply.length > 0) {
return 2;
}
pBomb.vecApply.push(roleId);
let pSelf = this;
setTimeout(() => {
pSelf.trigleStarBattle(nNpcOnlyID, roleId);
}, 800);
return 0;
}
// 挑战失败
ChallengeFail(npc_onlyid: any, battle: any) {
let pBomb = this.FindStar(npc_onlyid);
if (null == pBomb) {
return;
}
this.matchReward(battle,0);
pBomb.Reset();
}
// 检查创造怪物
checkAndCreateWordMagic(count: number) {
if (this.refresh_timer == 0) {
this.refresh_timer = setTimeout(() => {
this.refresh_timer = 0;
this.checkAndCreateWordMagic(count);
}, 60 * 1 * 1000);
}
// 证道恶鬼-上古战场
for (let i = 0; i < count; i++) {
this.vecMagic.push(new WorldStar(82022, 4004, 1, 2));
}
for (let it in this.vecMagic) {
let pWBomb = this.vecMagic[it];
pWBomb.Reset();
if (pWBomb.nOnlyID > 0) {
continue;
}
let stPos = pWBomb.GetPos();
pWBomb.nOnlyID = NpcMgr.shared.CreateNpc(pWBomb.nNpc, stPos.map, stPos.x, stPos.y, {
nKind: 0,
nID: 0
}, 0);
}
SKLogger.info(`恶鬼数量:${this.vecMagic.length}`)
}
// 触发战斗
trigleStarBattle(nNpcOnlyID: any, roleId: any) {
let pStar = this.FindStar(nNpcOnlyID);
if (null == pStar)
return;
if (pStar.vecApply.length <= 0)
return;
let pNpc = NpcMgr.shared.findNpc(nNpcOnlyID);
if (null == pNpc)
return;
let pPlayer = PlayerMgr.shared.getPlayerByRoleId(roleId);
if (null == pPlayer)
return;
let pBattle = pPlayer.monsterBattle(pNpc.monster_group);
if (null == pBattle)
return;
pBattle.source = nNpcOnlyID;
}
// 清理恶鬼
CheckWorldMagicDead(nOnlyID: any, battle: any) {
for (let it in this.vecMagic) {
let pWBomb = this.vecMagic[it];
if (pWBomb.nOnlyID != nOnlyID)
continue;
pWBomb.nOnlyID = 0;
NpcMgr.shared.DeleteNpc(nOnlyID);
this.matchReward(battle,1);
break;
}
}
// 清理所有恶鬼
CheckWorldMagicDeadAll() {
//关闭定时器
clearInterval(this.refresh_timer);
this.refresh_timer = 1;
SKLogger.info(`清理所有恶鬼!`)
for (let it in this.vecMagic) {
let pWBomb = this.vecMagic[it];
NpcMgr.shared.DeleteNpc(pWBomb.nOnlyID);
pWBomb.nOnlyID = 0;
}
this.vecMagic = [];
}
matchReward(battle: any, isWin: number){
if (battle != null && battle.campA != undefined){
for (let role of battle.campA.broles) {
// 获取当前队伍
if (role.living_type == 1){
if (role.source != null && role.source != undefined) {
let player = PlayerMgr.shared.getPlayerByRoleId(role.source.roleid);
if (player != null){
SatAssembly.shared.sendReward(player.teamid, isWin,1);
break;
}
}
}
}
}
}
}