@@ -19,8 +19,12 @@ define([ | |||
events.emit('onGetItems', this.items); | |||
}, | |||
extend: function (blueprint) { | |||
if (blueprint.destroyItems) | |||
var rerender = false; | |||
if (blueprint.destroyItems) { | |||
rerender = true; | |||
events.emit('onDestroyItems', blueprint.destroyItems); | |||
} | |||
if (blueprint.getItems) { | |||
var items = this.items; | |||
@@ -40,6 +44,8 @@ define([ | |||
return (item.id == nId); | |||
}); | |||
if (findItem) { | |||
rerender = (findItem.pos != nItem.pos); | |||
for (var p in findItem) { | |||
delete findItem[p]; | |||
} | |||
@@ -49,13 +55,15 @@ define([ | |||
newItems.splice(i, 1); | |||
i--; | |||
nLen--; | |||
} else | |||
} else { | |||
rerender = true; | |||
nItem.isNew = true; | |||
} | |||
} | |||
this.items.push.apply(this.items, blueprint.getItems || []); | |||
events.emit('onGetItems', this.items); | |||
events.emit('onGetItems', this.items, rerender); | |||
} | |||
} | |||
}; | |||
@@ -393,19 +393,17 @@ define([ | |||
events.emit('onShowItemTooltip', item, ttPos, compare, false, this.shiftDown); | |||
}, | |||
onGetItems: function (items) { | |||
onGetItems: function (items, rerender) { | |||
this.items = items; | |||
if (this.shown) | |||
if ((this.shown) && (rerender)) | |||
this.build(); | |||
}, | |||
onDestroyItems: function (itemIds) { | |||
itemIds.forEach(function (id) { | |||
var item = this.items.find(i => i.id == id); | |||
if (item == this.hoverItem) { | |||
//this.hoverItem = null; | |||
if (item == this.hoverItem) | |||
this.hideTooltip(); | |||
} | |||
this.items.spliceWhere(i => i.id == id); | |||
}, this); | |||
@@ -6,7 +6,8 @@ define([ | |||
'config/classes', | |||
'mtx/mtx', | |||
'config/factions', | |||
'misc/events' | |||
'misc/events', | |||
'items/itemEffects' | |||
], function ( | |||
generator, | |||
salvager, | |||
@@ -15,7 +16,8 @@ define([ | |||
classes, | |||
mtx, | |||
factions, | |||
events | |||
events, | |||
itemEffects | |||
) { | |||
return { | |||
type: 'inventory', | |||
@@ -93,15 +95,16 @@ define([ | |||
var mtxModule = require(mtxUrl); | |||
e.events = mtxModule.events; | |||
return; | |||
} 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 (!e.factionId) | |||
return; | |||
var faction = factions.getFaction(e.factionId); | |||
var statGenerator = faction.uniqueStat; | |||
statGenerator.generate(item); | |||
}); | |||
} | |||
@@ -913,7 +916,8 @@ define([ | |||
factionId: e.factionId, | |||
text: e.text, | |||
properties: e.properties, | |||
mtx: e.mtx | |||
mtx: e.mtx, | |||
name: e.name | |||
})); | |||
} | |||
@@ -1,35 +1,36 @@ | |||
define([ | |||
], function( | |||
], function ( | |||
) { | |||
return { | |||
type: 'slowed', | |||
chance: 0.3, | |||
events: { | |||
beforeMove: function(targetPos) { | |||
if (Math.random() < 0.3) | |||
beforeMove: function (targetPos) { | |||
if (Math.random() < this.chance) | |||
return; | |||
targetPos.success = false; | |||
}, | |||
beforeDealDamage: function(damage) { | |||
beforeDealDamage: function (damage) { | |||
if (!damage) | |||
return; | |||
if (Math.random() < 0.3) | |||
if (Math.random() < this.chance) | |||
return; | |||
damage.failed = true; | |||
}, | |||
beforeCastSpell: function(successObj) { | |||
if (Math.random() < 0.3) | |||
beforeCastSpell: function (successObj) { | |||
if (Math.random() < this.chance) | |||
return; | |||
successObj.success = false; | |||
} | |||
} | |||
}; | |||
}); | |||
}); |
@@ -0,0 +1,23 @@ | |||
define([ | |||
], function ( | |||
) { | |||
return { | |||
events: { | |||
afterDealDamage: function (item, damage, target) { | |||
var rolls = item.effects.find(e => (e.type == 'freezeOnHit')).rolls; | |||
var chanceRoll = Math.random() * 100; | |||
if (chanceRoll >= rolls.chance) | |||
return; | |||
target.effects.addEffect({ | |||
type: 'slowed', | |||
chance: 1, | |||
ttl: rolls.duration | |||
}); | |||
} | |||
} | |||
}; | |||
}); |
@@ -8,13 +8,12 @@ define([ | |||
'items/generators/worth', | |||
'items/generators/quantity', | |||
'items/generators/spellbook', | |||
'items/generators/currency' | |||
'items/generators/currency', | |||
'items/generators/effects' | |||
], function ( | |||
g1, g2, g3, g4, g5, g6, g7, g8, | |||
g9, | |||
g10 | |||
g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11 | |||
) { | |||
var generators = [].slice.apply(arguments, [0, 7]); | |||
var generators = [g1, g2, g3, g4, g5, g6, g11, g7]; | |||
var materialGenerators = [g6, g8]; | |||
var spellGenerators = [g1, g9]; | |||
var currencyGenerators = [g10]; | |||
@@ -0,0 +1,33 @@ | |||
define([ | |||
], function ( | |||
) { | |||
return { | |||
generate: function (item, blueprint) { | |||
if (!blueprint.effects) | |||
return; | |||
item.effects = blueprint.effects.map(function (e) { | |||
var rolls = e.rolls; | |||
var newRolls = {}; | |||
for (var p in rolls) { | |||
var isInt = (p.indexOf('i_') == 0); | |||
var fieldName = p.replace('i_', ''); | |||
var range = rolls[p]; | |||
var value = range[0] + (Math.random() * (range[1] - range[0])); | |||
if (isInt) | |||
value = ~~value; | |||
newRolls[fieldName] = value; | |||
} | |||
return { | |||
type: e.type, | |||
rolls: newRolls | |||
}; | |||
}); | |||
} | |||
}; | |||
}); |
@@ -1,11 +1,17 @@ | |||
define([ | |||
], function( | |||
], function ( | |||
) { | |||
return { | |||
generate: function(item, blueprint) { | |||
item.level = ~~(blueprint.level || 1); | |||
generate: function (item, blueprint) { | |||
var level = blueprint.level; | |||
if (level instanceof Array) { | |||
item.level = level[0] + ~~(Math.random() * (level[1] - level[0])); | |||
return; | |||
} | |||
item.level = ~~(level || 1); | |||
} | |||
}; | |||
}); | |||
}); |
@@ -1,11 +1,11 @@ | |||
define([ | |||
], function( | |||
], function ( | |||
) { | |||
return { | |||
generate: function(item, blueprint) { | |||
item.worth = Math.pow(item.level, 1.5) + (Math.pow((item.quality + 1), 2) * 10); | |||
generate: function (item, blueprint) { | |||
item.worth = ~~(Math.pow(item.level, 1.5) + (Math.pow((item.quality + 1), 2) * 10)); | |||
} | |||
}; | |||
}); | |||
}); |
@@ -0,0 +1,24 @@ | |||
define([ | |||
'misc/events' | |||
], function ( | |||
events | |||
) { | |||
var list = { | |||
}; | |||
return { | |||
init: function () { | |||
events.emit('onBeforeGetItemEffectList', list); | |||
}, | |||
get: function (name) { | |||
var res = list[name]; | |||
if (!res) | |||
return 'config/itemEffects/' + name; | |||
return res; | |||
} | |||
}; | |||
}); |
@@ -6,7 +6,7 @@ define([ | |||
return { | |||
id: 'theWinterMan', | |||
name: 'The Winter Man', | |||
description: ``, | |||
description: `Bearer of Gifts, Friend of the Downtrodden and the Watcher in the Snow.`, | |||
rewards: { | |||
@@ -23,6 +23,12 @@ define([ | |||
reward: 'Perfect Level 10 Ring', | |||
setSize: 3, | |||
mobName: 'flamingo' | |||
}, | |||
'Benthic Incantation': { | |||
chance: 0.05, | |||
reward: `Princess Morgawsa's Trident`, | |||
setSize: 7, | |||
zone: 'estuary' | |||
} | |||
}; | |||
@@ -132,6 +138,27 @@ define([ | |||
perfection: 1, | |||
slot: 'finger' | |||
}); | |||
}, | |||
"Princess Morgawsa's Trident": function () { | |||
return itemGenerator.generate({ | |||
name: `Princess Morgawsa's Trident`, | |||
level: [10, 15], | |||
quality: 4, | |||
noSpell: true, | |||
slot: 'twoHanded', | |||
sprite: [0, 0], | |||
spritesheet: '../../../images/legendaryItems.png', | |||
type: 'Trident', | |||
spellName: 'magic missile', | |||
effects: [{ | |||
type: 'freezeOnHit', | |||
rolls: { | |||
i_chance: [2, 5], | |||
i_duration: [2, 4] | |||
} | |||
}] | |||
}); | |||
} | |||
} | |||
}; | |||