const EntityNewPacket = require("../Packets/EntityNew"); const EntityDiePacket = require("../Packets/EntityDie"); const constants = require("../Data/constants"); const { TYPES, EVENTS } = constants; const { ENTITY_TYPE_COLLECTABLE } = TYPES; const { EVENT_DIE } = EVENTS; const queries = require("../Data/queries"); const { QUERY_FETCH_COLLECTABLE_SPAWN } = queries; const Collectable = require("../Game/Collectable"); module.exports = async function (map, globalDieCallback, globalRewardCallback) { const databaseSpawn = await execute(QUERY_FETCH_COLLECTABLE_SPAWN, [map.id, ENTITY_TYPE_COLLECTABLE]); if (databaseSpawn.error) return process.exit(); const spawns = databaseSpawn.data.reduce((spawns, spawn) => { if (!spawns[spawn.id]) { spawns[spawn.id] = { id: spawn.id, amount: spawn.amount, respawnTime: spawn.respawnTime, reward: [] }; }; if (spawn.categoryId) spawns[spawn.id].reward.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.registerCollectable(convertedSpawn, collectablesData => { collectablesData.forEach(data => { const { collectable, collectableSpawnProperties } = data; const packet = EntityNewPacket.collectable(collectableSpawnProperties); map.registerNetworkPacket(collectable.id, packet); collectable.on(EVENT_DIE, function (data, author) { const packet = EntityDiePacket(data); map.registerNetworkPacket(author, packet, [1]); }); }); }, globalDieCallback, globalRewardCallback, Collectable); };