@@ -59,6 +59,31 @@ define([ | |||||
events.emit('onGetItems', this.items, rerender); | events.emit('onGetItems', this.items, rerender); | ||||
} | } | ||||
}, | |||||
equipItemErrors: function (item) { | |||||
var errors = []; | |||||
var stats = this.obj.stats.values; | |||||
var playerLevel = (stats.originalLevel || stats.level); | |||||
if (item.level > playerLevel) | |||||
errors.push('level'); | |||||
if ((item.requires) && (stats[item.requires[0].stat] < item.requires[0].value)) | |||||
errors.push('stats'); | |||||
if (item.factions) { | |||||
if (item.factions.some(function (f) { | |||||
return f.noEquip; | |||||
})) | |||||
errors.push('faction'); | |||||
} | |||||
return errors; | |||||
}, | |||||
canEquipItem: function (item) { | |||||
return (this.equipItemErrors.length == 0); | |||||
} | } | ||||
}; | }; | ||||
}); | }); |
@@ -503,7 +503,7 @@ define([ | |||||
for (var s in equippedOffhand.stats) { | for (var s in equippedOffhand.stats) { | ||||
if (!compare.stats[s]) | if (!compare.stats[s]) | ||||
compare.stats[s] = 0; | compare.stats[s] = 0; | ||||
compare.stats[s] += equippedOffhand.stats[s] | compare.stats[s] += equippedOffhand.stats[s] | ||||
} | } | ||||
} | } | ||||
@@ -530,7 +530,7 @@ define([ | |||||
compare = equippedTwoHanded; | compare = equippedTwoHanded; | ||||
} | } | ||||
} | |||||
} | |||||
} | } | ||||
events.emit('onShowItemTooltip', item, ttPos, compare, false, this.shiftDown); | events.emit('onShowItemTooltip', item, ttPos, compare, false, this.shiftDown); | ||||
@@ -589,18 +589,12 @@ define([ | |||||
if (!item) | if (!item) | ||||
return; | return; | ||||
else if ((action == 'equip') && ((item.material) || (item.quest) || (item.type == 'mtx') || (item.level > playerLevel))) | |||||
else if ((action == 'equip') && ((item.material) || (item.quest) || (item.type == 'mtx') || (!window.player.inventory.canEquipItem(item)))) | |||||
return; | return; | ||||
else if ((action == 'learnAbility') && (item.level > playerLevel)) | |||||
else if ((action == 'learnAbility') && (!window.player.inventory.canEquipItem(item))) | |||||
return; | return; | ||||
else if ((action == 'activateMtx') && (item.type != 'mtx')) | else if ((action == 'activateMtx') && (item.type != 'mtx')) | ||||
return; | return; | ||||
if ((item.factions) && (action == 'equip')) { | |||||
if (item.factions.some(function (f) { | |||||
return f.noEquip; | |||||
})) | |||||
return; | |||||
} | |||||
var cpn = 'inventory'; | var cpn = 'inventory'; | ||||
if (action == 'equip') | if (action == 'equip') | ||||
@@ -28,7 +28,7 @@ | |||||
} | } | ||||
} | } | ||||
.stats { | |||||
> .stats { | |||||
color: darken(@white, 20%); | color: darken(@white, 20%); | ||||
margin-bottom: 8px; | margin-bottom: 8px; | ||||
@@ -55,13 +55,21 @@ | |||||
margin-bottom: 8px; | margin-bottom: 8px; | ||||
} | } | ||||
.level { | |||||
.requires { | |||||
margin-top: 8px; | margin-top: 8px; | ||||
color: darken(@white, 40%); | color: darken(@white, 40%); | ||||
&.high-level { | &.high-level { | ||||
color: @red; | color: @red; | ||||
} | } | ||||
.high-level { | |||||
color: @red; | |||||
} | |||||
> *:not(.high-level) { | |||||
color: darken(@white, 40%); | |||||
} | |||||
} | } | ||||
.material { | .material { | ||||
@@ -5,11 +5,15 @@ | |||||
</div> | </div> | ||||
<div class="stats">$STATS$</div> | <div class="stats">$STATS$</div> | ||||
<div class="effects">$EFFECTS$</div> | <div class="effects">$EFFECTS$</div> | ||||
<div class="faction">faction: $faction$</div> | |||||
<div class="material">crafting material</div> | <div class="material">crafting material</div> | ||||
<div class="quest">quest item</div> | <div class="quest">quest item</div> | ||||
<div class="spellName">$SPELLNAME$</div> | <div class="spellName">$SPELLNAME$</div> | ||||
<div class="damage">$DAMAGE$</div> | <div class="damage">$DAMAGE$</div> | ||||
<div class="level">level: $LEVEL$</div> | |||||
<div class="requires"> | |||||
requires: | |||||
<div class="level">level: $LEVEL$</div> | |||||
<div class="stats">$ATTRIBUTE$: $ATTRIBUTEVALUE$</div> | |||||
<div class="faction">faction: $faction$</div> | |||||
</div> | |||||
<div class="worth"></div> | <div class="worth"></div> | ||||
<div class="info"><br />[shift] to compare</div> | <div class="info"><br />[shift] to compare</div> |
@@ -154,6 +154,13 @@ define([ | |||||
.replace('$SLOT$', item.slot) | .replace('$SLOT$', item.slot) | ||||
.replace('$STATS$', stats) | .replace('$STATS$', stats) | ||||
.replace('$LEVEL$', level); | .replace('$LEVEL$', level); | ||||
if (item.requires) { | |||||
html = html | |||||
.replace('$ATTRIBUTE$', item.requires[0].stat) | |||||
.replace('$ATTRIBUTEVALUE$', item.requires[0].value); | |||||
} | |||||
if (item.power) | if (item.power) | ||||
html = html.replace('$POWER$', ' ' + (new Array(item.power + 1)).join('+')); | html = html.replace('$POWER$', ' ' + (new Array(item.power + 1)).join('+')); | ||||
@@ -194,6 +201,11 @@ define([ | |||||
else | else | ||||
this.tooltip.find('.level').show(); | this.tooltip.find('.level').show(); | ||||
if (!item.requires) | |||||
this.tooltip.find('.stats').hide(); | |||||
else | |||||
this.tooltip.find('.stats').show(); | |||||
if ((!item.type) || (item.type == item.name)) | if ((!item.type) || (item.type == item.name)) | ||||
this.tooltip.find('.type').hide(); | this.tooltip.find('.type').hide(); | ||||
else { | else { | ||||
@@ -205,10 +217,11 @@ define([ | |||||
if (item.power) | if (item.power) | ||||
this.tooltip.find('.power').show(); | this.tooltip.find('.power').show(); | ||||
var playerStats = window.player.stats.values; | |||||
var level = playerStats.originalLevel || playerStats.level; | |||||
if (item.level > level) | |||||
this.tooltip.find('.level').addClass('high-level'); | |||||
var equipErrors = window.player.inventory.equipItemErrors(item); | |||||
equipErrors.forEach(function (e) { | |||||
this.tooltip.find('.requires').addClass('high-level'); | |||||
this.tooltip.find('.requires .' + e).addClass('high-level'); | |||||
}, this); | |||||
if ((item.material) || (item.quest)) { | if ((item.material) || (item.quest)) { | ||||
this.tooltip.find('.level').hide(); | this.tooltip.find('.level').hide(); | ||||
@@ -37,14 +37,9 @@ define([ | |||||
var item = this.obj.inventory.findItem(itemId); | var item = this.obj.inventory.findItem(itemId); | ||||
if (!item) | if (!item) | ||||
return; | return; | ||||
else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (item.level > (stats.originalLevel || stats.level))) { | |||||
else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (!this.obj.inventory.canEquipItem(item))) { | |||||
item.eq = false; | item.eq = false; | ||||
return; | return; | ||||
} else if ((item.factions) && (this.obj.player)) { | |||||
if (!this.obj.reputation.canEquipItem(item)) { | |||||
item.eq = false; | |||||
return; | |||||
} | |||||
} | } | ||||
var currentEqId = this.eq[item.slot]; | var currentEqId = this.eq[item.slot]; | ||||
@@ -61,18 +56,12 @@ define([ | |||||
itemId = itemId.itemId; | itemId = itemId.itemId; | ||||
} | } | ||||
var level = (this.obj.stats.originalValues || this.obj.stats.values).level; | |||||
var item = this.obj.inventory.findItem(itemId); | var item = this.obj.inventory.findItem(itemId); | ||||
if (!item) | if (!item) | ||||
return; | return; | ||||
else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (item.level > level)) { | |||||
else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (!this.obj.inventory.canEquipItem(item))) { | |||||
item.eq = false; | item.eq = false; | ||||
return; | return; | ||||
} else if ((item.factions) && (this.obj.player)) { | |||||
if (!this.obj.reputation.canEquipItem(item)) { | |||||
item.eq = false; | |||||
return; | |||||
} | |||||
} | } | ||||
if (!slot) | if (!slot) | ||||
@@ -18,6 +18,7 @@ define([ | |||||
itemEffects | itemEffects | ||||
) { | ) { | ||||
return { | return { | ||||
//Properties | |||||
type: 'inventory', | type: 'inventory', | ||||
inventorySize: 50, | inventorySize: 50, | ||||
@@ -25,6 +26,8 @@ define([ | |||||
blueprint: null, | blueprint: null, | ||||
//Base Methods | |||||
init: function (blueprint, isTransfer) { | init: function (blueprint, isTransfer) { | ||||
var items = blueprint.items || []; | var items = blueprint.items || []; | ||||
var iLen = items.length; | var iLen = items.length; | ||||
@@ -68,51 +71,74 @@ define([ | |||||
this.hookItemEvents(); | this.hookItemEvents(); | ||||
}, | }, | ||||
hookItemEvents: function (items) { | |||||
var items = items || this.items; | |||||
var iLen = items.length; | |||||
for (var i = 0; i < iLen; i++) { | |||||
var item = items[i]; | |||||
save: function () { | |||||
return { | |||||
type: 'inventory', | |||||
items: this.items | |||||
}; | |||||
}, | |||||
if (item.effects) { | |||||
item.effects.forEach(function (e) { | |||||
if (e.mtx) { | |||||
var mtxUrl = mtx.get(e.mtx); | |||||
var mtxModule = require(mtxUrl); | |||||
simplify: function (self) { | |||||
if (!self) | |||||
return null; | |||||
e.events = mtxModule.events; | |||||
} else if (e.factionId) { | |||||
var faction = factions.getFaction(e.factionId); | |||||
var statGenerator = faction.uniqueStat; | |||||
statGenerator.generate(item); | |||||
} else { | |||||
var effectUrl = itemEffects.get(e.type); | |||||
var effectModule = require(effectUrl); | |||||
var reputation = this.obj.reputation; | |||||
e.events = effectModule.events; | |||||
} | |||||
}); | |||||
} | |||||
return { | |||||
type: 'inventory', | |||||
items: this.items | |||||
.map(function (i) { | |||||
var item = extend(true, {}, i); | |||||
if ((item.pos == null) && (!item.eq)) { | |||||
var pos = i; | |||||
for (var j = 0; j < iLen; j++) { | |||||
if (!items.some(fj => (fj.pos == j))) { | |||||
pos = j; | |||||
break; | |||||
if (item.effects) { | |||||
item.effects = item.effects.map(e => ({ | |||||
factionId: e.factionId, | |||||
text: e.text, | |||||
properties: e.properties, | |||||
mtx: e.mtx, | |||||
type: e.type, | |||||
rolls: e.rolls | |||||
})); | |||||
} | } | ||||
} | |||||
item.pos = pos; | |||||
} else if ((!item.eq) && (items.some(ii => ((ii != item) && (ii.pos == item.pos))))) { | |||||
var pos = item.pos; | |||||
for (var j = 0; j < iLen; j++) { | |||||
if (!items.some(fi => ((fi != item) && (fi.pos == j)))) { | |||||
pos = j; | |||||
break; | |||||
if (item.factions) { | |||||
item.factions = item.factions.map(function (f) { | |||||
var faction = reputation.getBlueprint(f.id); | |||||
var factionTier = reputation.getTier(f.id); | |||||
var noEquip = null; | |||||
if (factionTier < f.tier) | |||||
noEquip = true; | |||||
if (!faction) | |||||
console.log(f); | |||||
return { | |||||
id: f.id, | |||||
name: faction.name, | |||||
tier: f.tier, | |||||
tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier], | |||||
noEquip: noEquip | |||||
}; | |||||
}, this); | |||||
} | } | ||||
} | |||||
item.pos = pos; | |||||
} | |||||
return item; | |||||
}) | |||||
}; | |||||
}, | |||||
update: function () { | |||||
var items = this.items; | |||||
var iLen = items.length; | |||||
for (var i = 0; i < iLen; i++) { | |||||
var item = items[i]; | |||||
if (!item.cd) | |||||
continue; | |||||
item.cd--; | |||||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item); | |||||
} | } | ||||
}, | }, | ||||
@@ -439,6 +465,7 @@ define([ | |||||
callback: this.onCheckCharExists.bind(this, msg, item) | callback: this.onCheckCharExists.bind(this, msg, item) | ||||
}); | }); | ||||
}, | }, | ||||
onCheckCharExists: function (msg, item, res) { | onCheckCharExists: function (msg, item, res) { | ||||
if (!res) { | if (!res) { | ||||
this.resolveCallback(msg, 'Recipient does not exist'); | this.resolveCallback(msg, 'Recipient does not exist'); | ||||
@@ -454,6 +481,54 @@ define([ | |||||
//Helpers | //Helpers | ||||
hookItemEvents: function (items) { | |||||
var items = items || this.items; | |||||
var iLen = items.length; | |||||
for (var i = 0; i < iLen; i++) { | |||||
var item = items[i]; | |||||
if (item.effects) { | |||||
item.effects.forEach(function (e) { | |||||
if (e.mtx) { | |||||
var mtxUrl = mtx.get(e.mtx); | |||||
var mtxModule = require(mtxUrl); | |||||
e.events = mtxModule.events; | |||||
} else if (e.factionId) { | |||||
var faction = factions.getFaction(e.factionId); | |||||
var statGenerator = faction.uniqueStat; | |||||
statGenerator.generate(item); | |||||
} else { | |||||
var effectUrl = itemEffects.get(e.type); | |||||
var effectModule = require(effectUrl); | |||||
e.events = effectModule.events; | |||||
} | |||||
}); | |||||
} | |||||
if ((item.pos == null) && (!item.eq)) { | |||||
var pos = i; | |||||
for (var j = 0; j < iLen; j++) { | |||||
if (!items.some(fj => (fj.pos == j))) { | |||||
pos = j; | |||||
break; | |||||
} | |||||
} | |||||
item.pos = pos; | |||||
} else if ((!item.eq) && (items.some(ii => ((ii != item) && (ii.pos == item.pos))))) { | |||||
var pos = item.pos; | |||||
for (var j = 0; j < iLen; j++) { | |||||
if (!items.some(fi => ((fi != item) && (fi.pos == j)))) { | |||||
pos = j; | |||||
break; | |||||
} | |||||
} | |||||
item.pos = pos; | |||||
} | |||||
} | |||||
}, | |||||
setItemPosition: function (id) { | setItemPosition: function (id) { | ||||
var item = this.findItem(id); | var item = this.findItem(id); | ||||
if (!item) | if (!item) | ||||
@@ -950,75 +1025,24 @@ define([ | |||||
this.items = []; | this.items = []; | ||||
}, | }, | ||||
save: function () { | |||||
return { | |||||
type: 'inventory', | |||||
items: this.items | |||||
}; | |||||
}, | |||||
canEquipItem: function (item) { | |||||
var stats = this.obj.stats.values; | |||||
simplify: function (self) { | |||||
if (!self) | |||||
return null; | |||||
var playerLevel = (stats.originalLevel || stats.level); | |||||
if (item.level > playerLevel) | |||||
return false; | |||||
var reputation = this.obj.reputation; | |||||
if ((item.requires) && (stats[item.requires[0].stat] < item.requires[0].value)) | |||||
return false; | |||||
return { | |||||
type: 'inventory', | |||||
items: this.items | |||||
.map(function (i) { | |||||
var item = extend(true, {}, i); | |||||
if (item.effects) { | |||||
item.effects = item.effects.map(e => ({ | |||||
factionId: e.factionId, | |||||
text: e.text, | |||||
properties: e.properties, | |||||
mtx: e.mtx, | |||||
type: e.type, | |||||
rolls: e.rolls | |||||
})); | |||||
} | |||||
if (item.factions) { | |||||
item.factions = item.factions.map(function (f) { | |||||
var faction = reputation.getBlueprint(f.id); | |||||
var factionTier = reputation.getTier(f.id); | |||||
var noEquip = null; | |||||
if (factionTier < f.tier) | |||||
noEquip = true; | |||||
if (!faction) | |||||
console.log(f); | |||||
return { | |||||
id: f.id, | |||||
name: faction.name, | |||||
tier: f.tier, | |||||
tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier], | |||||
noEquip: noEquip | |||||
}; | |||||
}, this); | |||||
} | |||||
return item; | |||||
}) | |||||
}; | |||||
}, | |||||
update: function () { | |||||
var items = this.items; | |||||
var iLen = items.length; | |||||
for (var i = 0; i < iLen; i++) { | |||||
var item = items[i]; | |||||
if (!item.cd) | |||||
continue; | |||||
item.cd--; | |||||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item); | |||||
if (item.factions) { | |||||
if (item.factions.some(function (f) { | |||||
return f.noEquip; | |||||
})) | |||||
return false; | |||||
} | } | ||||
return true; | |||||
} | } | ||||
}; | }; | ||||
}); | }); |
@@ -1,23 +1,26 @@ | |||||
define([ | define([ | ||||
], function( | |||||
], function ( | |||||
) { | ) { | ||||
return { | return { | ||||
plate: { | plate: { | ||||
attrRequire: 'str', | |||||
statMult: { | statMult: { | ||||
armor: 1 | armor: 1 | ||||
} | } | ||||
}, | }, | ||||
leather: { | leather: { | ||||
attrRequire: 'dex', | |||||
statMult: { | statMult: { | ||||
armor: 0.6 | armor: 0.6 | ||||
} | } | ||||
}, | }, | ||||
cloth: { | cloth: { | ||||
attrRequire: 'int', | |||||
statMult: { | statMult: { | ||||
armor: 0.35 | armor: 0.35 | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
}); | |||||
}); |
@@ -159,6 +159,7 @@ define([ | |||||
}, | }, | ||||
oneHanded: { | oneHanded: { | ||||
'Sword': { | 'Sword': { | ||||
attrRequire: 'str', | |||||
sprite: [9, 0], | sprite: [9, 0], | ||||
spellName: 'melee', | spellName: 'melee', | ||||
spellConfig: { | spellConfig: { | ||||
@@ -173,6 +174,7 @@ define([ | |||||
} | } | ||||
}, | }, | ||||
'Dagger': { | 'Dagger': { | ||||
attrRequire: 'dex', | |||||
sprite: [9, 2], | sprite: [9, 2], | ||||
spellName: 'melee', | spellName: 'melee', | ||||
spellConfig: { | spellConfig: { | ||||
@@ -186,6 +188,7 @@ define([ | |||||
} | } | ||||
}, | }, | ||||
'Axe': { | 'Axe': { | ||||
attrRequire: 'str', | |||||
sprite: [9, 3], | sprite: [9, 3], | ||||
spellName: 'melee', | spellName: 'melee', | ||||
spellConfig: { | spellConfig: { | ||||
@@ -200,6 +203,7 @@ define([ | |||||
} | } | ||||
}, | }, | ||||
'Wand': { | 'Wand': { | ||||
attrRequire: 'int', | |||||
sprite: [9, 8], | sprite: [9, 8], | ||||
spellName: 'projectile', | spellName: 'projectile', | ||||
spellConfig: { | spellConfig: { | ||||
@@ -217,6 +221,7 @@ define([ | |||||
}, | }, | ||||
twoHanded: { | twoHanded: { | ||||
'Gnarled Staff': { | 'Gnarled Staff': { | ||||
attrRequire: 'int', | |||||
sprite: [9, 1], | sprite: [9, 1], | ||||
spellName: 'projectile', | spellName: 'projectile', | ||||
spellConfig: { | spellConfig: { | ||||
@@ -233,6 +238,7 @@ define([ | |||||
} | } | ||||
}, | }, | ||||
'Spear': { | 'Spear': { | ||||
attrRequire: 'str', | |||||
sprite: [9, 6], | sprite: [9, 6], | ||||
spellName: 'melee', | spellName: 'melee', | ||||
range: 2, | range: 2, | ||||
@@ -250,19 +256,23 @@ define([ | |||||
}, | }, | ||||
offHand: { | offHand: { | ||||
'Wooden Shield': { | 'Wooden Shield': { | ||||
attrRequire: 'str', | |||||
sprite: [13, 0], | sprite: [13, 0], | ||||
armorMult: 0.3, | armorMult: 0.3, | ||||
blockAttackMult: 1 | blockAttackMult: 1 | ||||
}, | }, | ||||
'Gilded Shield': { | 'Gilded Shield': { | ||||
attrRequire: 'str', | |||||
sprite: [13, 1], | sprite: [13, 1], | ||||
armorMult: 0.6, | armorMult: 0.6, | ||||
blockAttackMult: 0.5 | blockAttackMult: 0.5 | ||||
}, | }, | ||||
'Brittle Tome': { | 'Brittle Tome': { | ||||
attrRequire: 'int', | |||||
sprite: [13, 2] | sprite: [13, 2] | ||||
}, | }, | ||||
'Ancient Tome': { | 'Ancient Tome': { | ||||
attrRequire: 'int', | |||||
sprite: [13, 3] | sprite: [13, 3] | ||||
} | } | ||||
}, | }, | ||||
@@ -9,11 +9,12 @@ define([ | |||||
'items/generators/quantity', | 'items/generators/quantity', | ||||
'items/generators/spellbook', | 'items/generators/spellbook', | ||||
'items/generators/currency', | 'items/generators/currency', | ||||
'items/generators/effects' | |||||
'items/generators/effects', | |||||
'items/generators/attrRequire' | |||||
], function ( | ], function ( | ||||
g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11 | |||||
g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 | |||||
) { | ) { | ||||
var generators = [g1, g2, g3, g4, g5, g6, g11, g7]; | |||||
var generators = [g1, g2, g3, g4, g5, g6, g11, g12, g7]; | |||||
var materialGenerators = [g6, g8]; | var materialGenerators = [g6, g8]; | ||||
var spellGenerators = [g1, g9, g7]; | var spellGenerators = [g1, g9, g7]; | ||||
var currencyGenerators = [g10]; | var currencyGenerators = [g10]; | ||||
@@ -0,0 +1,41 @@ | |||||
define([ | |||||
'./stats' | |||||
], function ( | |||||
generatorStats | |||||
) { | |||||
return { | |||||
minSlotPerfection: 0.5, | |||||
maxSlotPerfection: 1, | |||||
minLevelMult: 0., | |||||
maxLevelMult: 1, | |||||
generate: function (item, blueprint) { | |||||
if (!blueprint.attrRequire) | |||||
return; | |||||
if (!item.requires) | |||||
item.requires = []; | |||||
var tempItem = { | |||||
quality: 0, | |||||
level: 20, | |||||
stats: {} | |||||
}; | |||||
var perfection = ~~(11 * (this.minSlotPerfection + (Math.random() * (this.maxSlotPerfection - this.minSlotPerfection)))); | |||||
generatorStats.generate(tempItem, { | |||||
forceStats: [blueprint.attrRequire], | |||||
perfection: perfection | |||||
}); | |||||
var statValue = tempItem.stats[Object.keys(tempItem.stats)[0]]; | |||||
statValue += ~~(item.level * (this.minLevelMult + ~~(Math.random() * (this.maxLevelMult - this.minLevelMult)))); | |||||
item.requires.push({ | |||||
stat: blueprint.attrRequire, | |||||
value: statValue | |||||
}); | |||||
} | |||||
}; | |||||
}); |
@@ -26,8 +26,16 @@ define([ | |||||
if (typeBlueprint.range) | if (typeBlueprint.range) | ||||
item.range = typeBlueprint.range; | item.range = typeBlueprint.range; | ||||
if ((typeBlueprint.material) && (blueprint.statMult.armor)) | |||||
blueprint.statMult.armor *= armorMaterials[typeBlueprint.material].statMult.armor; | |||||
if (typeBlueprint.material) { | |||||
var material = armorMaterials[typeBlueprint.material]; | |||||
blueprint.attrRequire = material.attrRequire; | |||||
if (blueprint.statMult.armor) | |||||
blueprint.statMult.armor *= material.statMult.armor | |||||
} | |||||
if (typeBlueprint.attrRequire) | |||||
blueprint.attrRequire = typeBlueprint.attrRequire; | |||||
if (typeBlueprint.armorMult) | if (typeBlueprint.armorMult) | ||||
blueprint.statMult.armor = typeBlueprint.armorMult; | blueprint.statMult.armor = typeBlueprint.armorMult; | ||||
@@ -130,6 +130,7 @@ define([ | |||||
types.oneHanded[s] = { | types.oneHanded[s] = { | ||||
sprite: [i, 0], | sprite: [i, 0], | ||||
spellName: 'melee', | spellName: 'melee', | ||||
attrRequire: ['int'], | |||||
spellConfig: { | spellConfig: { | ||||
statType: ['str', 'int'], | statType: ['str', 'int'], | ||||
statMult: 0.76, | statMult: 0.76, | ||||