@@ -2,82 +2,7 @@ let animations = require('../config/animations'); | |||
let spirits = require('../config/spirits'); | |||
let scheduler = require('../misc/scheduler'); | |||
let baseStats = { | |||
mana: 20, | |||
manaMax: 20, | |||
manaReservePercent: 0, | |||
hp: 5, | |||
hpMax: 5, | |||
xpTotal: 0, | |||
xp: 0, | |||
xpMax: 0, | |||
level: 1, | |||
str: 0, | |||
int: 0, | |||
dex: 0, | |||
magicFind: 0, | |||
itemQuantity: 0, | |||
regenHp: 0, | |||
regenMana: 5, | |||
addCritChance: 0, | |||
addCritMultiplier: 0, | |||
addAttackCritChance: 0, | |||
addAttackCritMultiplier: 0, | |||
addSpellCritChance: 0, | |||
addSpellCritMultiplier: 0, | |||
critChance: 5, | |||
critMultiplier: 150, | |||
attackCritChance: 0, | |||
attackCritMultiplier: 0, | |||
spellCritChance: 0, | |||
spellCritMultiplier: 0, | |||
armor: 0, | |||
vit: 0, | |||
blockAttackChance: 0, | |||
blockSpellChance: 0, | |||
dodgeAttackChance: 0, | |||
dodgeSpellChance: 0, | |||
attackSpeed: 0, | |||
castSpeed: 0, | |||
elementArcanePercent: 0, | |||
elementFrostPercent: 0, | |||
elementFirePercent: 0, | |||
elementHolyPercent: 0, | |||
elementPoisonPercent: 0, | |||
physicalPercent: 0, | |||
elementPercent: 0, | |||
spellPercent: 0, | |||
elementArcaneResist: 0, | |||
elementFrostResist: 0, | |||
elementFireResist: 0, | |||
elementHolyResist: 0, | |||
elementPoisonResist: 0, | |||
elementAllResist: 0, | |||
sprintChance: 0, | |||
xpIncrease: 0, | |||
lifeOnHit: 0, | |||
//Fishing stats | |||
catchChance: 0, | |||
catchSpeed: 0, | |||
fishRarity: 0, | |||
fishWeight: 0, | |||
fishItems: 0 | |||
}; | |||
const baseStats = require('./stats/baseStats'); | |||
module.exports = { | |||
type: 'stats', | |||
@@ -0,0 +1,75 @@ | |||
const events = require('../../misc/events'); | |||
const baseStats = { | |||
mana: 20, | |||
manaMax: 20, | |||
manaReservePercent: 0, | |||
hp: 5, | |||
hpMax: 5, | |||
xpTotal: 0, | |||
xp: 0, | |||
xpMax: 0, | |||
level: 1, | |||
str: 0, | |||
int: 0, | |||
dex: 0, | |||
magicFind: 0, | |||
itemQuantity: 0, | |||
regenHp: 0, | |||
regenMana: 5, | |||
addCritChance: 0, | |||
addCritMultiplier: 0, | |||
addAttackCritChance: 0, | |||
addAttackCritMultiplier: 0, | |||
addSpellCritChance: 0, | |||
addSpellCritMultiplier: 0, | |||
critChance: 5, | |||
critMultiplier: 150, | |||
attackCritChance: 0, | |||
attackCritMultiplier: 0, | |||
spellCritChance: 0, | |||
spellCritMultiplier: 0, | |||
armor: 0, | |||
vit: 0, | |||
blockAttackChance: 0, | |||
blockSpellChance: 0, | |||
dodgeAttackChance: 0, | |||
dodgeSpellChance: 0, | |||
attackSpeed: 0, | |||
castSpeed: 0, | |||
elementArcanePercent: 0, | |||
elementFrostPercent: 0, | |||
elementFirePercent: 0, | |||
elementHolyPercent: 0, | |||
elementPoisonPercent: 0, | |||
physicalPercent: 0, | |||
elementPercent: 0, | |||
spellPercent: 0, | |||
elementArcaneResist: 0, | |||
elementFrostResist: 0, | |||
elementFireResist: 0, | |||
elementHolyResist: 0, | |||
elementPoisonResist: 0, | |||
elementAllResist: 0, | |||
sprintChance: 0, | |||
xpIncrease: 0, | |||
lifeOnHit: 0 | |||
}; | |||
events.emit('onBeforeGetBaseStats', baseStats); | |||
module.exports = baseStats; |
@@ -3,7 +3,7 @@ module.exports = { | |||
1: { | |||
msg: [{ | |||
msg: 'What? Oh...what are you doing here?', | |||
options: [1.1, 1.2, 1.3, 1.4, 1.5] | |||
options: [1.1, 1.2] | |||
}], | |||
options: { | |||
1.1: { | |||
@@ -13,18 +13,6 @@ module.exports = { | |||
1.2: { | |||
msg: 'My ship got wrecked, just south of here. I\'m stranded on this island.', | |||
goto: 3 | |||
}, | |||
1.3: { | |||
msg: 'Have you scavenged anything worth selling lately?', | |||
goto: 'tradeBuy' | |||
}, | |||
1.4: { | |||
msg: 'I have some items you might be interested in.', | |||
goto: 'tradeSell' | |||
}, | |||
1.5: { | |||
msg: 'I changed my mind, I want to buy something back.', | |||
goto: 'tradeBuyback' | |||
} | |||
} | |||
}, | |||
@@ -84,51 +72,18 @@ module.exports = { | |||
goto: 1 | |||
} | |||
} | |||
}, | |||
tradeBuy: { | |||
cpn: 'trade', | |||
method: 'startBuy', | |||
args: [{ | |||
targetName: 'hermit' | |||
}] | |||
}, | |||
tradeSell: { | |||
cpn: 'trade', | |||
method: 'startSell', | |||
args: [{ | |||
targetName: 'hermit' | |||
}] | |||
}, | |||
tradeBuyback: { | |||
cpn: 'trade', | |||
method: 'startBuyback', | |||
args: [{ | |||
targetName: 'hermit' | |||
}] | |||
} | |||
}, | |||
estrid: { | |||
1: { | |||
msg: [{ | |||
msg: 'Is there anything I can help you with today?', | |||
options: [1.1, 1.3, 1.4, 1.5] | |||
options: [1.1] | |||
}], | |||
options: { | |||
1.1: { | |||
msg: 'How long have you been working here?', | |||
goto: 2 | |||
}, | |||
1.3: { | |||
msg: 'I\'d like to browse your wares.', | |||
goto: 'tradeBuy' | |||
}, | |||
1.4: { | |||
msg: 'I have some items to sell', | |||
goto: 'tradeSell' | |||
}, | |||
1.5: { | |||
msg: 'I want to buy something back', | |||
goto: 'tradeBuyback' | |||
} | |||
} | |||
}, | |||
@@ -153,27 +108,6 @@ module.exports = { | |||
goto: 1 | |||
} | |||
} | |||
}, | |||
tradeBuy: { | |||
cpn: 'trade', | |||
method: 'startBuy', | |||
args: [{ | |||
targetName: 'estrid' | |||
}] | |||
}, | |||
tradeSell: { | |||
cpn: 'trade', | |||
method: 'startSell', | |||
args: [{ | |||
targetName: 'estrid' | |||
}] | |||
}, | |||
tradeBuyback: { | |||
cpn: 'trade', | |||
method: 'startBuyback', | |||
args: [{ | |||
targetName: 'estrid' | |||
}] | |||
} | |||
}, | |||
vikar: { | |||
@@ -556,39 +556,6 @@ module.exports = { | |||
attackable: false, | |||
rare: { | |||
count: 0 | |||
}, | |||
properties: { | |||
cpnTrade: { | |||
items: { | |||
min: 3, | |||
max: 5 | |||
}, | |||
forceItems: [{ | |||
name: 'Flimsy Fishing Rod', | |||
type: 'Fishing Rod', | |||
slot: 'tool', | |||
quality: 0, | |||
worth: 5, | |||
sprite: [11, 0], | |||
infinite: true, | |||
noSalvage: true | |||
}, { | |||
name: 'Skewering Stick', | |||
material: true, | |||
sprite: [11, 7], | |||
worth: 2, | |||
quality: 0, | |||
infinite: true | |||
}], | |||
level: { | |||
min: 1, | |||
max: 5 | |||
}, | |||
markup: { | |||
buy: 0.25, | |||
sell: 2.5 | |||
} | |||
} | |||
} | |||
}, | |||
guard: { | |||
@@ -608,30 +575,6 @@ module.exports = { | |||
rare: { | |||
count: 0 | |||
}, | |||
properties: { | |||
cpnTrade: { | |||
items: { | |||
min: 0, | |||
max: 0, | |||
extra: [{ | |||
name: 'Empty Vial', | |||
material: true, | |||
sprite: [0, 9], | |||
worth: 10, | |||
infinite: true | |||
}] | |||
}, | |||
faction: { | |||
id: 'fjolgard', | |||
tier: 5 | |||
}, | |||
markup: { | |||
buy: 0.25, | |||
sell: 2.5 | |||
} | |||
} | |||
} | |||
}, | |||
vikar: { | |||
@@ -1,61 +0,0 @@ | |||
module.exports = { | |||
currencies: { | |||
'Unstable Idol': { | |||
quantity: 1, | |||
quality: 1, | |||
description: 'Rerolls the stats on an item', | |||
material: true, | |||
sprite: [1, 8], | |||
action: 'reroll' | |||
}, | |||
'Ascendant Idol': { | |||
quantity: 1, | |||
quality: 2, | |||
description: 'Increases the level of an item', | |||
material: true, | |||
sprite: [3, 8], | |||
action: 'relevel' | |||
}, | |||
'Dragon-Glass Idol': { | |||
quantity: 1, | |||
quality: 3, | |||
description: 'Rerolls an item\'s slot', | |||
material: true, | |||
sprite: [6, 8], | |||
action: 'reslot' | |||
}, | |||
'Bone Idol': { | |||
quantity: 1, | |||
quality: 3, | |||
description: 'Rerolls a weapon\'s damage', | |||
material: true, | |||
sprite: [7, 8], | |||
action: 'reforge' | |||
}, | |||
'Smoldering Idol': { | |||
quantity: 1, | |||
quality: 4, | |||
description: 'Removes all augments from an item', | |||
material: true, | |||
sprite: [8, 8], | |||
action: 'scour' | |||
} | |||
}, | |||
chance: { | |||
'Unstable Idol': 37, | |||
'Ascendant Idol': 15, | |||
'Dragon-Glass Idol': 5, | |||
'Bone Idol': 6, | |||
'Smoldering Idol': 1 | |||
}, | |||
getCurrencyFromAction: function (action) { | |||
let currencies = this.currencies; | |||
let pick = Object.keys(currencies).find(o => (currencies[o].action === action)); | |||
return extend({ | |||
name: pick | |||
}, currencies[pick]); | |||
} | |||
}; |
@@ -7,18 +7,12 @@ let g4 = require('./generators/types'); | |||
let g5 = require('./generators/stats'); | |||
let g6 = require('./generators/names'); | |||
let g7 = require('./generators/worth'); | |||
let g8 = require('./generators/quantity'); | |||
let g9 = require('./generators/spellbook'); | |||
let g10 = require('./generators/currency'); | |||
let g11 = require('./generators/effects'); | |||
let g12 = require('./generators/attrRequire'); | |||
let g13 = require('./generators/recipeBook'); | |||
let generators = [g1, g2, g3, g4, g5, g6, g11, g12, g7]; | |||
let materialGenerators = [g6, g8]; | |||
let spellGenerators = [g1, g2, g9, g7]; | |||
let currencyGenerators = [g10, g8]; | |||
let recipeGenerators = [g6, g13]; | |||
module.exports = { | |||
spellChance: 0.035, | |||
@@ -65,7 +59,7 @@ module.exports = { | |||
if (blueprint.noCurrency) | |||
currencyChance = 0; | |||
if (!blueprint.slot && !blueprint.noSpell && !blueprint.material) { | |||
if (!blueprint.slot && !blueprint.noSpell) { | |||
isSpell = blueprint.spell; | |||
isCurrency = blueprint.currency; | |||
if ((!isCurrency) && (!isSpell) && ((!hadBlueprint) || ((!blueprint.type) && (!blueprint.slot) && (!blueprint.stats)))) { | |||
@@ -80,22 +74,10 @@ module.exports = { | |||
if (isSpell) | |||
spellGenerators.forEach(g => g.generate(item, blueprint)); | |||
else if (isCurrency) | |||
currencyGenerators.forEach(g => g.generate(item, blueprint)); | |||
else if (blueprint.material) { | |||
item.material = true; | |||
item.sprite = blueprint.sprite || null; | |||
item.noDrop = blueprint.noDrop || null; | |||
item.noSalvage = blueprint.noSalvage || null; | |||
item.noDestroy = blueprint.noDestroy || null; | |||
item.quality = blueprint.quality || 0; | |||
materialGenerators.forEach(g => g.generate(item, blueprint)); | |||
} else if (blueprint.type === 'mtx') { | |||
else if (blueprint.type === 'mtx') { | |||
item = extend({}, blueprint); | |||
delete item.chance; | |||
} else if (blueprint.type === 'recipe') | |||
recipeGenerators.forEach(g => g.generate(item, blueprint)); | |||
else { | |||
} else { | |||
generators.forEach(g => g.generate(item, blueprint)); | |||
if (blueprint.spellName) | |||
g9.generate(item, blueprint); | |||
@@ -1,22 +0,0 @@ | |||
let configCurrencies = require('../config/currencies'); | |||
let chances = []; | |||
for (let c in configCurrencies.chance) { | |||
let rolls = configCurrencies.chance[c]; | |||
for (let i = 0; i < rolls; i++) | |||
chances.push(c); | |||
} | |||
module.exports = { | |||
generate: function (item, blueprint) { | |||
let pick = null; | |||
if (!blueprint.name) | |||
pick = chances[~~(Math.random() * chances.length)]; | |||
else | |||
pick = Object.keys(configCurrencies.currencies).find(c => (c.toLowerCase().indexOf(blueprint.name.toLowerCase()) > -1)); | |||
item.name = pick; | |||
extend(item, configCurrencies.currencies[pick]); | |||
} | |||
}; |
@@ -1,13 +0,0 @@ | |||
module.exports = { | |||
generate: function (item, { profession, teaches, sprite = [0, 5] }) { | |||
item.sprite = sprite; | |||
item.spritesheet = '../../../images/consumables.png'; | |||
item.type = 'recipe'; | |||
item.noSalvage = true; | |||
item.recipe = { | |||
profession, | |||
teaches | |||
}; | |||
} | |||
}; |
@@ -97,15 +97,13 @@ module.exports = { | |||
file = file.replace('/' + root + '/', ''); | |||
const validModPatterns = ['.png', '/ui/', '/clientComponents/', '/audio/']; | |||
const validRequest = ( | |||
root !== 'server' || | |||
( | |||
file.includes('mods/') && | |||
( | |||
file.includes('.png') || | |||
file.includes('/ui/') || | |||
file.includes('/clientComponents/') | |||
) | |||
validModPatterns.some(v => file.includes(v)) | |||
) | |||
); | |||