@@ -1,8 +1,6 @@ | |||||
module.exports = { | module.exports = { | ||||
name: 'The Crystal Caves', | name: 'The Crystal Caves', | ||||
level: [14, 16], | level: [14, 16], | ||||
addLevel: 0, | |||||
resources: {}, | |||||
mobs: { | mobs: { | ||||
default: { | default: { | ||||
spells: [{ | spells: [{ | ||||
@@ -1,8 +1,6 @@ | |||||
module.exports = { | module.exports = { | ||||
name: 'The Estuary', | name: 'The Estuary', | ||||
level: [15, 18], | level: [15, 18], | ||||
addLevel: 0, | |||||
resources: {}, | |||||
mobs: { | mobs: { | ||||
default: { | default: { | ||||
faction: 'hostile', | faction: 'hostile', | ||||
@@ -1,429 +0,0 @@ | |||||
module.exports = { | |||||
name: 'Fishing Tournament', | |||||
description: 'Catch the heaviest Ancient Carp for a chance to win Angler\'s Marks. Speak with Angler Nayla for more info.', | |||||
distance: -1, | |||||
cron: '0 7,19 * * *', | |||||
notifications: [{ | |||||
mark: 0, | |||||
msg: 'Angler Nayla: The Fishing Tournament begins in 10 minutes.', | |||||
desc: 'Begins in 10 minutes.' | |||||
}, { | |||||
mark: 857, | |||||
msg: 'Angler Nayla: The Fishing Tournament begins in 5 minutes.', | |||||
desc: 'Begins in 5 minutes.' | |||||
}, { | |||||
mark: 1543, | |||||
msg: 'Angler Nayla: The Fishing Tournament begins in 1 minute.', | |||||
desc: 'Begins in 1 minute.' | |||||
}, { | |||||
mark: 1714, | |||||
msg: 'Angler Nayla: The Fishing Tournament has begun!', | |||||
desc: '' | |||||
}, { | |||||
mark: 2571, | |||||
msg: 'Angler Nayla: The Fishing Tournament ends in 5 minutes.', | |||||
desc: 'Ends in 5 minutes.' | |||||
}, { | |||||
mark: 3256, | |||||
msg: 'Angler Nayla: The Fishing Tournament ends in 1 minute.', | |||||
desc: 'Ends in 1 minute.' | |||||
}, { | |||||
mark: 3428, | |||||
msg: 'Angler Nayla: The Fishing Tournament is over.' | |||||
}], | |||||
duration: 4285, | |||||
prizeTime: 3428, | |||||
descBase: 'Catch the heaviest Ancient Carp for a chance to win Angler\'s Marks. Speak with Angler Nayla for more info.', | |||||
descLeaderboard: null, | |||||
descTimer: null, | |||||
events: { | |||||
afterGiveRewards: function (events) { | |||||
let event = events.getEvent('Fishing Tournament'); | |||||
event.descBase = 'The tournament has ended.'; | |||||
event.descLeaderboard = null; | |||||
event.descTimer = null; | |||||
events.setEventDescription('Fishing Tournament', this.description); | |||||
}, | |||||
beforeSetDescription: function (events) { | |||||
let event = events.getEvent('Fishing Tournament'); | |||||
event.description = event.descBase; | |||||
if (event.descLeaderboard) | |||||
event.description += '<br /><br />' + event.descLeaderboard; | |||||
if (event.descTimer) | |||||
event.description += '<br /><br />' + event.descTimer; | |||||
} | |||||
}, | |||||
helpers: { | |||||
updateRewards: function (event, anglerNayla) { | |||||
event.ranks = {}; | |||||
event.rewards = {}; | |||||
event.weights = {}; | |||||
let tempFish = anglerNayla.inventory.items | |||||
.filter(i => (i.name.indexOf('Ancient Carp') > -1)) | |||||
.sort((a, b) => (b.stats.weight - a.stats.weight)); | |||||
let fish = []; | |||||
tempFish.forEach(function (t) { | |||||
if (!fish.some(f => (f.owner === t.owner))) | |||||
fish.push(t); | |||||
}); | |||||
let rewardCounts = [25, 15, 7]; | |||||
let tpl = { | |||||
name: 'Angler\'s Mark', | |||||
sprite: [12, 9], | |||||
noDrop: true, | |||||
noDestroy: true, | |||||
noSalvage: true | |||||
}; | |||||
let consolationQty = 2; | |||||
let rank = 0; | |||||
let lastWeight = fish[0].stats.weight; | |||||
for (let i = 0; i < fish.length; i++) { | |||||
let f = fish[i]; | |||||
if (event.rewards[f.owner]) | |||||
continue; | |||||
if (f.stats.weight < lastWeight) { | |||||
lastWeight = f.stats.weight; | |||||
rank++; | |||||
} | |||||
event.ranks[f.owner] = rank + 1; | |||||
event.weights[f.owner] = f.stats.weight; | |||||
let rewardQty = rewardCounts[rank] || consolationQty; | |||||
event.rewards[f.owner] = [extend({ | |||||
quantity: rewardQty | |||||
}, tpl)]; | |||||
} | |||||
}, | |||||
updateDescription: function (event, events) { | |||||
let ranks = event.ranks; | |||||
let weights = event.weights; | |||||
let desc = 'Leaderboard:<br />'; | |||||
for (let playerName in ranks) | |||||
desc += `${ranks[playerName]}: ${playerName} (${weights[playerName]}) <br />`; | |||||
desc = desc.substr(0, desc.length - 6); | |||||
event.config.descLeaderboard = desc; | |||||
events.setEventDescription('Fishing Tournament'); | |||||
}, | |||||
updateWinText: function (event, events) { | |||||
let ranks = event.ranks; | |||||
let winText = 'Angler Nayla: '; | |||||
let winners = Object.keys(ranks).filter(r => (ranks[r] === 1)); | |||||
let wLen = winners.length; | |||||
winners.forEach(function (w, i) { | |||||
winText += ((wLen > 1) && (i === wLen - 1)) ? `and ${w} ` : `${w} `; | |||||
}); | |||||
winText += 'won!'; | |||||
events.setWinText('Fishing Tournament', winText); | |||||
}, | |||||
giveFish: function (source, target) { | |||||
let srcInventory = source.inventory; | |||||
let tgtInventory = target.inventory; | |||||
srcInventory.items | |||||
.filter(i => (i.name.indexOf('Ancient Carp') > -1)) | |||||
.sort((a, b) => (b.stats.weight - a.stats.weight)) | |||||
.forEach(function (f, i) { | |||||
if (i === 0) { | |||||
f.owner = source.name; | |||||
tgtInventory.getItem(extend({}, f)); | |||||
} | |||||
srcInventory.destroyItem(f.id); | |||||
}); | |||||
}, | |||||
getRank: function (event, playerName) { | |||||
let ranks = event.ranks; | |||||
if (!ranks) | |||||
return -1; | |||||
return (ranks[playerName] || -1); | |||||
} | |||||
}, | |||||
phases: [{ | |||||
type: 'spawnMob', | |||||
endMark: 1714, | |||||
mobs: { | |||||
name: 'Angler Nayla', | |||||
attackable: false, | |||||
level: 20, | |||||
cell: 69, | |||||
id: 'anglerNayla', | |||||
hpMult: 1, | |||||
pos: { | |||||
x: 140, | |||||
y: 46 | |||||
}, | |||||
dialogue: { | |||||
auto: true, | |||||
config: { | |||||
1: { | |||||
msg: [{ | |||||
msg: 'Hi there, are you here to compete?', | |||||
options: [1.1, 1.2, 1.3] | |||||
}], | |||||
options: { | |||||
1.1: { | |||||
msg: 'What\'s happening here?', | |||||
goto: 2 | |||||
}, | |||||
1.2: { | |||||
msg: 'Could I please have a Competition Rod?', | |||||
goto: 5 | |||||
}, | |||||
1.3: { | |||||
msg: 'I would like to trade some Angler\'s Marks.', | |||||
goto: 'tradeBuy' | |||||
} | |||||
} | |||||
}, | |||||
2: { | |||||
msg: 'Why, the Grand Fishing Tournament, of course! Anglers come from all over to compete in this esteemed event.', | |||||
options: { | |||||
2.1: { | |||||
msg: 'How does it work?', | |||||
goto: 3 | |||||
} | |||||
} | |||||
}, | |||||
3: { | |||||
msg: 'Simply catch fish during the tournament. If you\'re lucky, you\'ll catch an Ancient Carp. Bring them to me and if you catch the heaviest one, you win!', | |||||
options: { | |||||
3.1: { | |||||
msg: 'What are the prizes?', | |||||
goto: 4 | |||||
} | |||||
} | |||||
}, | |||||
4: { | |||||
msg: 'The top three participants will win Angler\'s Marks that can be exchanged for Fishing Rods and Cerulean Pearls.', | |||||
options: { | |||||
4.1: { | |||||
msg: 'I would like to ask something else.', | |||||
goto: 1 | |||||
} | |||||
} | |||||
}, | |||||
5: { | |||||
msg: [{ | |||||
msg: '', | |||||
options: [1.1, 1.2, 1.3, 1.4] | |||||
}], | |||||
cpn: 'dialogue', | |||||
method: 'getItem', | |||||
args: [{ | |||||
item: { | |||||
name: 'Competition Rod', | |||||
slot: 'tool', | |||||
sprite: [11, 1], | |||||
type: 'Fishing Rod', | |||||
worth: 0, | |||||
noSalvage: true, | |||||
noAugment: true, | |||||
stats: { | |||||
catchSpeed: 50, | |||||
catchChance: 25 | |||||
} | |||||
}, | |||||
successMsg: 'May it cast true.', | |||||
existsMsg: 'Oh, it seems that you already have one.' | |||||
}] | |||||
}, | |||||
tradeBuy: { | |||||
cpn: 'trade', | |||||
method: 'startBuy', | |||||
args: [{ | |||||
targetName: 'angler nayla' | |||||
}] | |||||
} | |||||
} | |||||
}, | |||||
trade: { | |||||
items: { | |||||
min: 0, | |||||
max: 0 | |||||
}, | |||||
forceItems: [{ | |||||
name: 'Cerulean Pearl', | |||||
material: true, | |||||
sprite: [11, 9], | |||||
infinite: true, | |||||
quality: 3, | |||||
worth: { | |||||
currency: 'Angler\'s Mark', | |||||
amount: 4 | |||||
} | |||||
}, { | |||||
name: 'Common Fishing Rod', | |||||
type: 'Fishing Rod', | |||||
slot: 'tool', | |||||
quality: 0, | |||||
worth: { | |||||
currency: 'Angler\'s Mark', | |||||
amount: 5 | |||||
}, | |||||
sprite: [11, 0], | |||||
infinite: true, | |||||
stats: { | |||||
stats: '???' | |||||
} | |||||
}, { | |||||
name: 'Magic Fishing Rod', | |||||
type: 'Fishing Rod', | |||||
slot: 'tool', | |||||
quality: 1, | |||||
worth: { | |||||
currency: 'Angler\'s Mark', | |||||
amount: 15 | |||||
}, | |||||
sprite: [11, 0], | |||||
infinite: true, | |||||
stats: { | |||||
stats: '???' | |||||
} | |||||
}, { | |||||
name: 'Rare Fishing Rod', | |||||
type: 'Fishing Rod', | |||||
slot: 'tool', | |||||
quality: 2, | |||||
worth: { | |||||
currency: 'Angler\'s Mark', | |||||
amount: 45 | |||||
}, | |||||
sprite: [11, 0], | |||||
infinite: true, | |||||
stats: { | |||||
stats: '???' | |||||
} | |||||
}], | |||||
faction: { | |||||
id: 'anglers' | |||||
}, | |||||
level: { | |||||
min: 1, | |||||
max: 5 | |||||
}, | |||||
markup: { | |||||
buy: 0.25, | |||||
sell: 2.5 | |||||
} | |||||
} | |||||
} | |||||
}, { | |||||
type: 'hookEvents', | |||||
endMark: 3428, | |||||
auto: true, | |||||
events: { | |||||
beforeGatherResource: function (gatherResult, gatherer) { | |||||
if (gatherResult.nodeType !== 'fish') | |||||
return; | |||||
let hasCompRod = gatherer.inventory.items.some(i => ((i.name === 'Competition Rod') && (i.eq))); | |||||
if (!hasCompRod) | |||||
return; | |||||
gatherResult.items.forEach(function (g) { | |||||
extend(g, { | |||||
name: 'Ancient Carp', | |||||
sprite: [11, 4], | |||||
noDrop: true, | |||||
worth: 0 | |||||
}); | |||||
}); | |||||
}, | |||||
beforeEnterPool: function (gatherResult, gatherer) { | |||||
if (gatherResult.nodeName === 'Sun Carp') | |||||
gatherResult.nodeName = 'Ancient Carp'; | |||||
} | |||||
} | |||||
}, { | |||||
type: 'modifyDialogue', | |||||
endMark: 3428, | |||||
mobId: 'anglerNayla', | |||||
dialogue: { | |||||
add: { | |||||
1: { | |||||
1.4: { | |||||
msg: 'I\'d like to hand in some fish.', | |||||
prereq: function (obj) { | |||||
let fishies = obj.inventory.items.find(i => (i.name.indexOf('Ancient Carp') > -1)); | |||||
return !!fishies; | |||||
}, | |||||
goto: 'giveFish' | |||||
} | |||||
}, | |||||
giveFish: { | |||||
msg: [{ | |||||
msg: '', | |||||
options: [1.1, 1.2, 1.3, 1.4] | |||||
}], | |||||
method: function (obj) { | |||||
let eventConfig = this.instance.events.getEvent('Fishing Tournament'); | |||||
if (!eventConfig) | |||||
return; | |||||
let helpers = eventConfig.helpers; | |||||
let event = eventConfig.event; | |||||
let oldRank = helpers.getRank(event, obj.name); | |||||
helpers.giveFish(obj, this); | |||||
helpers.updateRewards(event, this); | |||||
let newRank = helpers.getRank(event, obj.name); | |||||
helpers.updateDescription(event, this.instance.events); | |||||
if (oldRank !== newRank) { | |||||
helpers.updateWinText(event, this.instance.events); | |||||
return { | |||||
1: 'Wow, that one\'s huge. You took first place!', | |||||
2: 'Nice catch. You took second place!', | |||||
3: 'Not bad at all. You took third place!' | |||||
}[newRank]; | |||||
} else if (newRank === 1) | |||||
return 'Great, you\'re still in first place!'; | |||||
return 'Not quite heavy enough, keep trying!'; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
}, { | |||||
type: 'modifyDialogue', | |||||
mobId: 'anglerNayla', | |||||
dialogue: { | |||||
remove: { | |||||
1: { | |||||
1.4: null | |||||
}, | |||||
giveFish: null | |||||
} | |||||
} | |||||
}] | |||||
}; |
@@ -1,22 +1,6 @@ | |||||
module.exports = { | module.exports = { | ||||
name: 'Fjolarok', | name: 'Fjolarok', | ||||
level: [1, 10], | level: [1, 10], | ||||
resources: { | |||||
Skyblossom: { | |||||
type: 'herb', | |||||
max: 4 | |||||
}, | |||||
Emberleaf: { | |||||
type: 'herb', | |||||
max: 1, | |||||
cdMax: 1710 | |||||
}, | |||||
'Sun Carp School': { | |||||
max: 900, | |||||
type: 'fish', | |||||
quantity: [6, 12] | |||||
} | |||||
}, | |||||
objects: { | objects: { | ||||
shopestrid: { | shopestrid: { | ||||
properties: { | properties: { | ||||
@@ -1,40 +0,0 @@ | |||||
let events = require('../misc/events'); | |||||
module.exports = { | |||||
init: function () { | |||||
events.emit('onBeforeGetResourceNodeConfig', this); | |||||
}, | |||||
Moonbell: { | |||||
sheetName: 'tiles', | |||||
cell: 50, | |||||
itemSprite: [1, 1] | |||||
}, | |||||
Skyblossom: { | |||||
sheetName: 'tiles', | |||||
cell: 52, | |||||
itemSprite: [1, 2] | |||||
}, | |||||
Emberleaf: { | |||||
sheetName: 'tiles', | |||||
cell: 51, | |||||
itemSprite: [1, 0] | |||||
}, | |||||
'Sun Carp School': { | |||||
sheetName: 'objects', | |||||
itemSprite: [11, 2], | |||||
baseWeight: 3, | |||||
ttl: 30 | |||||
}, | |||||
Stinkcap: { | |||||
sheetName: 'tiles', | |||||
cell: 57, | |||||
itemSprite: [2, 0] | |||||
}, | |||||
Mudfish: { | |||||
sheetName: 'objects', | |||||
itemSprite: [11, 3], | |||||
baseWeight: 5, | |||||
ttl: 30 | |||||
} | |||||
}; |
@@ -220,26 +220,21 @@ module.exports = { | |||||
}, | }, | ||||
giveRewards: function (config) { | giveRewards: function (config) { | ||||
let event = config.event; | |||||
const { event: { rewards = {} } } = config; | |||||
config.event.participators.forEach(function (p) { | |||||
let rList = [{ | |||||
nameLike: 'Ancient Carp', | |||||
removeAll: true | |||||
}]; | |||||
let rewards = event.rewards; | |||||
if ((rewards) && (rewards[p.name])) { | |||||
rewards[p.name].forEach(r => rList.push(r)); | |||||
if (rList.length > 1) | |||||
rList[1].msg = `${event.config.name} reward:`; | |||||
} | |||||
Object.entries(rewards).forEach(e => { | |||||
const { name, rList } = e; | |||||
this.instance.mail.sendMail(p.name, rList); | |||||
}, this); | |||||
if (!rList.length) | |||||
return; | |||||
rList[0].msg = `${config.name} reward:`; | |||||
this.instance.mail.sendMail(name, rList); | |||||
}); | |||||
if ((config.events) && (config.events.afterGiveRewards)) | if ((config.events) && (config.events.afterGiveRewards)) | ||||
config.events.afterGiveRewards(this); | |||||
config.events.afterGiveRewards(this, config); | |||||
}, | }, | ||||
stopEvent: function (config) { | stopEvent: function (config) { | ||||
@@ -452,12 +447,8 @@ module.exports = { | |||||
event.participators.push(obj); | event.participators.push(obj); | ||||
result.push(event); | result.push(event); | ||||
let rList = [{ | |||||
nameLike: 'Ancient Carp', | |||||
removeAll: true | |||||
}]; | |||||
this.instance.mail.sendMail(obj.name, rList); | |||||
if (event.config.events && event.config.events.onParticipantJoin) | |||||
event.config.events.onParticipantJoin(this, obj); | |||||
continue; | continue; | ||||
} | } | ||||
@@ -478,12 +469,8 @@ module.exports = { | |||||
event.participators.push(obj); | event.participators.push(obj); | ||||
result.push(event); | result.push(event); | ||||
let rList = [{ | |||||
nameLike: 'Ancient Carp', | |||||
removeAll: true | |||||
}]; | |||||
this.instance.mail.sendMail(obj.name, rList); | |||||
if (event.config.events && event.config.events.onParticipantJoin) | |||||
event.config.events.onParticipantJoin(this, obj); | |||||
break; | break; | ||||
} | } | ||||
@@ -9,11 +9,15 @@ let factions = require('./config/factions'); | |||||
let classes = require('./config/spirits'); | let classes = require('./config/spirits'); | ||||
let spellsConfig = require('./config/spellsConfig'); | let spellsConfig = require('./config/spellsConfig'); | ||||
let spells = require('./config/spells'); | let spells = require('./config/spells'); | ||||
let itemTypes = require('./items/config/types'); | |||||
let mapList = require('./config/maps/mapList'); | let mapList = require('./config/maps/mapList'); | ||||
let sheets = require('./security/sheets'); | let sheets = require('./security/sheets'); | ||||
let fixes = require('./fixes/fixes'); | let fixes = require('./fixes/fixes'); | ||||
let profanities = require('./misc/profanities'); | let profanities = require('./misc/profanities'); | ||||
const itemTypes = require('./items/config/types'); | |||||
const itemPrefixes = require('./items/config/prefixes'); | |||||
const itemSuffixes = require('./items/config/suffixes'); | |||||
const routerConfig = require('./security/routerConfig'); | const routerConfig = require('./security/routerConfig'); | ||||
let startup = { | let startup = { | ||||
@@ -36,7 +40,11 @@ let startup = { | |||||
classes.init(); | classes.init(); | ||||
spellsConfig.init(); | spellsConfig.init(); | ||||
spells.init(); | spells.init(); | ||||
itemTypes.init(); | itemTypes.init(); | ||||
itemPrefixes.init(); | |||||
itemSuffixes.init(); | |||||
profanities.init(); | profanities.init(); | ||||
mapList.init(); | mapList.init(); | ||||
components.init(this.onComponentsReady.bind(this)); | components.init(this.onComponentsReady.bind(this)); | ||||
@@ -1,4 +1,6 @@ | |||||
module.exports = { | |||||
const events = require('../../misc/events'); | |||||
const prefixes = { | |||||
generic: [ | generic: [ | ||||
'aether', | 'aether', | ||||
'abyssal', | 'abyssal', | ||||
@@ -202,11 +204,14 @@ module.exports = { | |||||
head: [ | head: [ | ||||
'masked' | 'masked' | ||||
], | ], | ||||
tool: [ | |||||
'angler%', | |||||
'fisherman%', | |||||
'linesman%', | |||||
'trawler%' | |||||
] | |||||
tool: [] | |||||
} | |||||
}; | |||||
module.exports = { | |||||
prefixes, | |||||
init: function () { | |||||
events.emit('onBeforeGetItemNamePrefixes', prefixes); | |||||
} | } | ||||
}; | }; |
@@ -1,4 +1,6 @@ | |||||
module.exports = { | |||||
const events = require('../../misc/events'); | |||||
const suffixes = { | |||||
generic: [ | generic: [ | ||||
'absence', | 'absence', | ||||
'abomination', | 'abomination', | ||||
@@ -187,23 +189,14 @@ module.exports = { | |||||
'chain', | 'chain', | ||||
'noose' | 'noose' | ||||
], | ], | ||||
tool: [ | |||||
'angler', | |||||
'bait-caster', | |||||
'baiter', | |||||
'branch', | |||||
'fish-catcher', | |||||
'fish-stick', | |||||
'fisher', | |||||
'hook', | |||||
'line', | |||||
'lure', | |||||
'pole', | |||||
'reel', | |||||
'rod', | |||||
'stick', | |||||
'tackle', | |||||
'twig' | |||||
] | |||||
tool: [] | |||||
} | |||||
}; | |||||
module.exports = { | |||||
suffixes, | |||||
init: function () { | |||||
events.emit('onBeforeGetItemNameSuffixes', suffixes); | |||||
} | } | ||||
}; | }; |
@@ -476,15 +476,11 @@ let types = { | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
tool: { | |||||
'Fishing Rod': { | |||||
sprite: [11, 0] | |||||
} | |||||
} | |||||
tool: {} | |||||
}; | }; | ||||
module.exports = { | module.exports = { | ||||
types: types, | |||||
types, | |||||
init: function () { | init: function () { | ||||
events.emit('onBeforeGetItemTypes', types); | events.emit('onBeforeGetItemTypes', types); | ||||
} | } | ||||
@@ -1,3 +1,5 @@ | |||||
const events = require('../misc/events'); | |||||
let g1 = require('./generators/level'); | let g1 = require('./generators/level'); | ||||
let g2 = require('./generators/quality'); | let g2 = require('./generators/quality'); | ||||
let g3 = require('./generators/slots'); | let g3 = require('./generators/slots'); | ||||
@@ -31,6 +33,16 @@ module.exports = { | |||||
let item = {}; | let item = {}; | ||||
const generateEvent = { | |||||
blueprint, | |||||
item, | |||||
ignore: false | |||||
}; | |||||
events.emit('onBeforeGenerateItem', generateEvent); | |||||
if (generateEvent.ignore) | |||||
return item; | |||||
const dropChancesEvent = { | const dropChancesEvent = { | ||||
blueprint, | blueprint, | ||||
spellChance: this.spellChance, | spellChance: this.spellChance, | ||||
@@ -98,6 +110,8 @@ module.exports = { | |||||
if (blueprint.uses) | if (blueprint.uses) | ||||
item.uses = blueprint.uses; | item.uses = blueprint.uses; | ||||
events.emit('onAfterGenerateItem', generateEvent); | |||||
return item; | return item; | ||||
}, | }, | ||||
@@ -1,5 +1,5 @@ | |||||
let prefixes = require('../config/prefixes'); | |||||
let suffixes = require('../config/suffixes'); | |||||
const { prefixes } = require('../config/prefixes'); | |||||
const { suffixes } = require('../config/suffixes'); | |||||
module.exports = { | module.exports = { | ||||
generators: [ | generators: [ | ||||
@@ -1,4 +1,4 @@ | |||||
let statsFishingRod = require('./statsFishingRod'); | |||||
const events = require('../../misc/events'); | |||||
module.exports = { | module.exports = { | ||||
generators: { | generators: { | ||||
@@ -494,14 +494,19 @@ module.exports = { | |||||
}, | }, | ||||
generate: function (item, blueprint, result) { | generate: function (item, blueprint, result) { | ||||
if (item.slot === 'tool') { | |||||
statsFishingRod.generate(item, blueprint, result); | |||||
return; | |||||
} | |||||
if (!blueprint.statCount) | if (!blueprint.statCount) | ||||
item.stats = {}; | item.stats = {}; | ||||
const eventMsg = { | |||||
item, | |||||
blueprint, | |||||
result, | |||||
ignore: false | |||||
}; | |||||
events.emit('onBeforeGenerateItemStats', eventMsg); | |||||
if (eventMsg.ignore) | |||||
return; | |||||
if (blueprint.noStats) | if (blueprint.noStats) | ||||
return; | return; | ||||
@@ -1,57 +0,0 @@ | |||||
module.exports = { | |||||
generators: { | |||||
catchChance: function (item, blueprint) { | |||||
return random.expNorm(0, 60); | |||||
}, | |||||
catchSpeed: function (item, blueprint) { | |||||
return random.expNorm(0, 150); | |||||
}, | |||||
fishRarity: function (item, blueprint) { | |||||
return random.expNorm(0, 100); | |||||
}, | |||||
fishWeight: function (item, blueprint) { | |||||
return random.expNorm(0, 75); | |||||
}, | |||||
fishItems: function (item, blueprint) { | |||||
return random.expNorm(0, 50); | |||||
} | |||||
}, | |||||
generate: function (item, blueprint, result) { | |||||
let statCount = blueprint.statCount || (item.quality + 1); | |||||
let stats = Object.keys(this.generators); | |||||
if (!item.stats) | |||||
item.stats = {}; | |||||
for (let i = 0; i < statCount; i++) { | |||||
let stat = stats[~~(Math.random() * stats.length)]; | |||||
let value = Math.ceil(this.generators[stat].call(this, item, blueprint)); | |||||
if (result) { | |||||
result.addStatMsgs.push({ | |||||
stat: stat, | |||||
value: value | |||||
}); | |||||
} | |||||
if (!item.stats[stat]) | |||||
item.stats[stat] = 0; | |||||
item.stats[stat] += value; | |||||
if (blueprint.statCount) { | |||||
if (!item.enchantedStats) | |||||
item.enchantedStats = {}; | |||||
if (item.enchantedStats[stat]) | |||||
item.enchantedStats[stat] += value; | |||||
else | |||||
item.enchantedStats[stat] = value; | |||||
} | |||||
} | |||||
} | |||||
}; |
@@ -9,7 +9,6 @@ let randomMap = require('./randomMap'); | |||||
let events = require('../events/events'); | let events = require('../events/events'); | ||||
let scheduler = require('../misc/scheduler'); | let scheduler = require('../misc/scheduler'); | ||||
let mail = require('../mail/mail'); | let mail = require('../mail/mail'); | ||||
let resourceNodes = require('../config/resourceNodes'); | |||||
let eventEmitter = require('../misc/events'); | let eventEmitter = require('../misc/events'); | ||||
const transactions = require('../security/transactions'); | const transactions = require('../security/transactions'); | ||||
@@ -24,7 +23,6 @@ module.exports = { | |||||
this.zoneId = args.zoneId; | this.zoneId = args.zoneId; | ||||
spellCallbacks.init(); | spellCallbacks.init(); | ||||
resourceNodes.init(); | |||||
map.init(args); | map.init(args); | ||||
const fakeInstance = { | const fakeInstance = { | ||||
@@ -14,11 +14,14 @@ let factions = require('../config/factions'); | |||||
let classes = require('../config/spirits'); | let classes = require('../config/spirits'); | ||||
let spellsConfig = require('../config/spellsConfig'); | let spellsConfig = require('../config/spellsConfig'); | ||||
let spells = require('../config/spells'); | let spells = require('../config/spells'); | ||||
let itemTypes = require('../items/config/types'); | |||||
let mapList = require('../config/maps/mapList'); | let mapList = require('../config/maps/mapList'); | ||||
let sheets = require('../security/sheets'); | let sheets = require('../security/sheets'); | ||||
let itemEffects = require('../items/itemEffects'); | let itemEffects = require('../items/itemEffects'); | ||||
const itemTypes = require('../items/config/types'); | |||||
const itemPrefixes = require('../items/config/prefixes'); | |||||
const itemSuffixes = require('../items/config/suffixes'); | |||||
let onCpnsReady = function () { | let onCpnsReady = function () { | ||||
factions.init(); | factions.init(); | ||||
skins.init(); | skins.init(); | ||||
@@ -27,7 +30,11 @@ let onCpnsReady = function () { | |||||
classes.init(); | classes.init(); | ||||
spellsConfig.init(); | spellsConfig.init(); | ||||
spells.init(); | spells.init(); | ||||
itemTypes.init(); | itemTypes.init(); | ||||
itemPrefixes.init(); | |||||
itemSuffixes.init(); | |||||
mapList.init(); | mapList.init(); | ||||
sheets.init(); | sheets.init(); | ||||
itemEffects.init(); | itemEffects.init(); | ||||