|
- let slots = require('../../../items/generators/slots');
-
- module.exports = {
- type: 'lootGen',
-
- need: 10,
- have: 0,
-
- mobType: null,
- mobName: null,
- item: null,
-
- build: function () {
- if ((!this.mobName) || (!this.item)) {
- let mobTypes = this.obj.instance.spawners.zone.mobs;
- let mobCounts = this.obj.instance.spawners.mobTypes;
- let keys = Object.keys(mobTypes).filter(function (m) {
- let mobBlueprint = mobTypes[m];
-
- return (
- (m !== 'default') &&
- (mobBlueprint.questItem) &&
- (mobBlueprint.level <= (this.obj.stats.values.level * 1.35))
- );
- }, this);
-
- //No level appropriate mobs found
- if (keys.length === 0)
- return false;
-
- this.mobType = keys[~~(Math.random() * keys.length)];
- let needMax = 8;
- this.mobName = this.mobType.replace(/\w\S*/g, function (txt) {
- return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
- });
-
- this.need = Math.max(1, ~~((needMax * 0.2) + (Math.random() * needMax * 0.8)));
-
- this.item = mobTypes[this.mobType].questItem || mobTypes.default.questItem;
- }
-
- this.name = this.item.name + ' Gatherer';
- this.description = 'Loot ' + this.have + '/' + this.need + ' ' + this.item.name + ' from ' + this.mobName;
-
- return true;
- },
-
- getXpMultiplier: function () {
- return (this.need * 1.5);
- },
-
- oComplete: function () {
- let inventory = this.obj.inventory;
- let item = inventory.items.find((i => i.name === this.item.name).bind(this));
- if (item)
- this.obj.inventory.destroyItem(item.id, this.need);
- },
-
- events: {
- beforeTargetDeath: function (target, dropItems) {
- if ((this.obj.zoneName !== this.zoneName) || (target.name.toLowerCase() !== this.mobType) || (this.have >= this.need))
- return;
-
- let roll = Math.random();
- if (roll < 0.5)
- return;
-
- dropItems.push({
- name: this.item.name,
- quality: 0,
- quantity: 1,
- quest: true,
- sprite: this.item.sprite,
- ownerId: this.obj.serverId
- });
- },
-
- afterLootMobItem: function (item) {
- if ((this.obj.zoneName !== this.zoneName) || (item.name.toLowerCase() !== this.item.name.toLowerCase()))
- return;
-
- this.have++;
- if (this.have === this.need)
- this.ready();
-
- this.description = 'Loot ' + this.have + '/' + this.need + ' ' + this.item.name + ' from ' + this.mobName;
- this.obj.syncer.setArray(true, 'quests', 'updateQuests', this.simplify(true));
- },
-
- afterDestroyItem: function (item, quantity) {
- if (item.name.toLowerCase() !== this.item.name.toLowerCase())
- return;
-
- this.have -= quantity;
- if (this.have < 0)
- this.have = 0;
-
- this.description = 'Loot ' + this.have + '/' + this.need + ' ' + this.item.name + ' from ' + this.mobName;
- this.obj.syncer.setArray(true, 'quests', 'updateQuests', this.simplify(true));
- }
- }
- };
|