Files
pirate-corsaire-server/Handlers/NPC.js
T
2026-08-24 22:20:36 +02:00

78 lines
2.7 KiB
JavaScript

const getFixedDate = require("../Utility/getFixedDate");
const Game = require("../Game/Game");
const { maps } = Game;
const constants = require("../Data/constants");
const { TYPES } = constants;
const { ENTITY_TYPE_NPC } = TYPES;
const queries = require("../Data/queries");
const { QUERY_FETCH_NPC_SPAWN } = queries;
const NPCWorker = global.NPCWorker;
const NPC = require("../Game/NPC");
const nonPlayerCharacterNetworkListeners = require("./NPCTest");
const messages = {
1: function (data) {
const { path, id, mapID } = data;
const map = maps[mapID - 1];
const npc = map.npcs.get(id);
if (!npc) return;
npc.startMovement(path);
}
};
NPCWorker.on("message", data => {
const { messageId } = data;
const event = messages[messageId];
if (event) event(data);
});
module.exports = async function (map, globalDieCallback, globalRewardCallback, globalAttackCallback) {
const databaseSpawn = await execute(QUERY_FETCH_NPC_SPAWN, [map.id, ENTITY_TYPE_NPC]);
if (databaseSpawn.error) return process.exit();
const spawns = databaseSpawn.data.reduce((spawns, spawn) => {
if (!spawns[spawn.id]) {
spawns[spawn.id] = {
id: spawn.id,
parentEntityTypeId: spawn.parentEntityTypeId,
name: spawn.name,
speed: spawn.speed,
minHealth: spawn.minHealth,
maxHealth: spawn.maxHealth,
amount: spawn.amount,
respawnTime: spawn.respawnTime,
rewardEntries: []
};
};
if (spawn.categoryId) spawns[spawn.id].rewardEntries.push({
categoryId: spawn.categoryId,
itemId: spawn.itemId,
min: spawn.min,
max: spawn.max,
chance: spawn.chance,
isLastShot: spawn.isLastShot
});
return spawns;
}, {});
const convertedSpawn = Object.values(spawns);
map.setupNonPlayerCharacterSpawn(convertedSpawn, nonPlayerCharacterNetworkListeners, globalDieCallback, globalRewardCallback, globalAttackCallback, NPC);
const event = {
fn: map.spawnEntityGroups.bind(map),
arguments: [nonPlayerCharacterNetworkListeners, NPC, globalAttackCallback, globalDieCallback],
next: Game.eventsFixed.add.bind(Game.eventsFixed)
};
const nextRunDate = getFixedDate(30);
Game.eventsFixed.add(nextRunDate, event);
};