let itemGenerator = require('../../items/generator'); let config = { 'Runecrafter\'s Toil': { chance: 0.025, reward: 'Level 10 Rune', setSize: 3, mobLevel: [3, 100] }, 'Godly Promise': { chance: 0.015, reward: 'Level 15 Legendary Weapon', setSize: 6, zone: 'sewer' }, 'The Other Heirloom': { chance: 0.02, reward: 'Perfect Level 10 Ring', setSize: 3, mobName: 'flamingo' }, 'Benthic Incantation': { chance: 0.015, reward: 'Princess Morgawsa\'s Trident', setSize: 12, zone: 'estuary' }, 'Fangs of Fury': { chance: 0.2, reward: 'Steelclaw\'s Bite', setSize: 20, mobName: 'steelclaw' }, 'Tradesman\'s Pride': { chance: 0.01, reward: 'Five Random Idols', setSize: 10 } }; module.exports = { init: function () { }, fixCard: function (card) { let template = config[card.name]; if (!template) return; card.setSize = template.setSize; }, getCard: function (looter, mob) { let pool = []; let mobLevel = mob.stats.values.level; let configs = extend(true, {}, config); looter.instance.eventEmitter.emit('onBeforeGetCardsConfig', configs); Object.keys(configs).forEach(function (c) { let card = configs[c]; if (!card.chance) return; let rqrLevel = card.mobLevel; if (rqrLevel) { if ((rqrLevel.push) && ((mobLevel < rqrLevel[0]) || (mobLevel > rqrLevel[1]))) return; else if ((!rqrLevel.push) && (mobLevel !== rqrLevel)) return; } let mobName = card.mobName; if (mobName) { if ((mobName.toLowerCase) && (mob.name.toLowerCase() !== mobName.toLowerCase())) return; else if ((mobName.push) && (!mobName.some(m => (m.toLowerCase() === mob.name.toLowerCase())))) return; } if ((card.zone) && (looter.zoneName !== card.zone)) return; if (Math.random() >= card.chance) return; pool.push(c); }, this); if (pool.length === 0) return; let pickName = pool[~~(Math.random() * pool.length)]; let pick = configs[pickName]; let card = { name: pickName, spritesheet: pick.spritesheet || `${this.folderName}/images/items.png`, type: 'Reward Card', description: 'Reward: ' + pick.reward, noSalvage: true, sprite: pick.sprite || [0, 0], quantity: 1, quality: pick.quality || 1, setSize: pick.setSize }; return card; }, getReward: function (looter, set) { let configs = extend(true, {}, config); looter.instance.eventEmitter.emit('onBeforeGetCardsConfig', configs); let reward = configs[set].reward; let msg = { reward: reward, handler: this.rewards[reward] }; looter.instance.eventEmitter.emit('onBeforeGetCardReward', msg); return msg.handler(looter); }, rewards: { 'Level 10 Rune': function () { return itemGenerator.generate({ level: 10, spell: true }); }, 'Level 15 Legendary Weapon': function () { let slot = ['oneHanded', 'twoHanded'][~~(Math.random() * 2)]; return itemGenerator.generate({ level: 15, quality: 4, noSpell: true, slot: slot }); }, 'Perfect Level 10 Ring': function () { return itemGenerator.generate({ level: 10, noSpell: true, quality: 1, perfection: 1, slot: 'finger' }); }, "Princess Morgawsa's Trident": function () { return itemGenerator.generate({ name: 'Princess Morgawsa\'s Trident', level: [18, 20], quality: 4, noSpell: true, slot: 'twoHanded', sprite: [0, 0], spritesheet: '../../../images/legendaryItems.png', type: 'Trident', description: 'Summoned from the ancient depths of the ocean by the Benthic Incantation.', stats: ['elementFrostPercent', 'elementFrostPercent', 'elementFrostPercent'], effects: [{ type: 'freezeOnHit', rolls: { i_chance: [2, 5], i_duration: [2, 4] } }], spellName: 'projectile', spellConfig: { statType: 'int', statMult: 0.9, element: 'arcane', auto: true, cdMax: 7, manaCost: 0, range: 9, random: { damage: [2, 15] } } }); }, 'Five Random Idols': function () { let result = []; for (let i = 0; i < 5; i++) { result.push(itemGenerator.generate({ currency: true })); } return result; }, "Steelclaw's Bite": function () { return itemGenerator.generate({ name: 'Steelclaw\'s Bite', level: [18, 20], quality: 4, noSpell: true, slot: 'oneHanded', sprite: [1, 0], spritesheet: '../../../images/legendaryItems.png', type: 'Curved Dagger', description: 'The blade seems to be made of some kind of bone and steel alloy.', stats: ['dex', 'dex', 'addCritMultiplier', 'addCritMultiplier'], effects: [{ type: 'damageSelf', properties: { element: 'poison' }, rolls: { i_percentage: [8, 22] } }, { type: 'alwaysCrit', rolls: {} }], spellName: 'melee', spellConfig: { statType: 'dex', statMult: 0.88, cdMax: 3, useWeaponRange: true, random: { damage: [1, 3.8] } } }); } } };