78 lines
2.7 KiB
JavaScript
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);
|
|
}; |