@@ -19,8 +19,12 @@ define([ | |||||
events.emit('onGetItems', this.items); | events.emit('onGetItems', this.items); | ||||
}, | }, | ||||
extend: function (blueprint) { | extend: function (blueprint) { | ||||
if (blueprint.destroyItems) | |||||
var rerender = false; | |||||
if (blueprint.destroyItems) { | |||||
rerender = true; | |||||
events.emit('onDestroyItems', blueprint.destroyItems); | events.emit('onDestroyItems', blueprint.destroyItems); | ||||
} | |||||
if (blueprint.getItems) { | if (blueprint.getItems) { | ||||
var items = this.items; | var items = this.items; | ||||
@@ -40,6 +44,8 @@ define([ | |||||
return (item.id == nId); | return (item.id == nId); | ||||
}); | }); | ||||
if (findItem) { | if (findItem) { | ||||
rerender = (findItem.pos != nItem.pos); | |||||
for (var p in findItem) { | for (var p in findItem) { | ||||
delete findItem[p]; | delete findItem[p]; | ||||
} | } | ||||
@@ -49,13 +55,15 @@ define([ | |||||
newItems.splice(i, 1); | newItems.splice(i, 1); | ||||
i--; | i--; | ||||
nLen--; | nLen--; | ||||
} else | |||||
} else { | |||||
rerender = true; | |||||
nItem.isNew = true; | nItem.isNew = true; | ||||
} | |||||
} | } | ||||
this.items.push.apply(this.items, blueprint.getItems || []); | 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); | events.emit('onShowItemTooltip', item, ttPos, compare, false, this.shiftDown); | ||||
}, | }, | ||||
onGetItems: function (items) { | |||||
onGetItems: function (items, rerender) { | |||||
this.items = items; | this.items = items; | ||||
if (this.shown) | |||||
if ((this.shown) && (rerender)) | |||||
this.build(); | this.build(); | ||||
}, | }, | ||||
onDestroyItems: function (itemIds) { | onDestroyItems: function (itemIds) { | ||||
itemIds.forEach(function (id) { | itemIds.forEach(function (id) { | ||||
var item = this.items.find(i => i.id == id); | var item = this.items.find(i => i.id == id); | ||||
if (item == this.hoverItem) { | |||||
//this.hoverItem = null; | |||||
if (item == this.hoverItem) | |||||
this.hideTooltip(); | this.hideTooltip(); | ||||
} | |||||
this.items.spliceWhere(i => i.id == id); | this.items.spliceWhere(i => i.id == id); | ||||
}, this); | }, this); | ||||
@@ -6,7 +6,8 @@ define([ | |||||
'config/classes', | 'config/classes', | ||||
'mtx/mtx', | 'mtx/mtx', | ||||
'config/factions', | 'config/factions', | ||||
'misc/events' | |||||
'misc/events', | |||||
'items/itemEffects' | |||||
], function ( | ], function ( | ||||
generator, | generator, | ||||
salvager, | salvager, | ||||
@@ -15,7 +16,8 @@ define([ | |||||
classes, | classes, | ||||
mtx, | mtx, | ||||
factions, | factions, | ||||
events | |||||
events, | |||||
itemEffects | |||||
) { | ) { | ||||
return { | return { | ||||
type: 'inventory', | type: 'inventory', | ||||
@@ -93,15 +95,16 @@ define([ | |||||
var mtxModule = require(mtxUrl); | var mtxModule = require(mtxUrl); | ||||
e.events = mtxModule.events; | 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, | factionId: e.factionId, | ||||
text: e.text, | text: e.text, | ||||
properties: e.properties, | properties: e.properties, | ||||
mtx: e.mtx | |||||
mtx: e.mtx, | |||||
name: e.name | |||||
})); | })); | ||||
} | } | ||||
@@ -1,35 +1,36 @@ | |||||
define([ | define([ | ||||
], function( | |||||
], function ( | |||||
) { | ) { | ||||
return { | return { | ||||
type: 'slowed', | type: 'slowed', | ||||
chance: 0.3, | |||||
events: { | events: { | ||||
beforeMove: function(targetPos) { | |||||
if (Math.random() < 0.3) | |||||
beforeMove: function (targetPos) { | |||||
if (Math.random() < this.chance) | |||||
return; | return; | ||||
targetPos.success = false; | targetPos.success = false; | ||||
}, | }, | ||||
beforeDealDamage: function(damage) { | |||||
beforeDealDamage: function (damage) { | |||||
if (!damage) | if (!damage) | ||||
return; | return; | ||||
if (Math.random() < 0.3) | |||||
if (Math.random() < this.chance) | |||||
return; | return; | ||||
damage.failed = true; | damage.failed = true; | ||||
}, | }, | ||||
beforeCastSpell: function(successObj) { | |||||
if (Math.random() < 0.3) | |||||
beforeCastSpell: function (successObj) { | |||||
if (Math.random() < this.chance) | |||||
return; | return; | ||||
successObj.success = false; | 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/worth', | ||||
'items/generators/quantity', | 'items/generators/quantity', | ||||
'items/generators/spellbook', | 'items/generators/spellbook', | ||||
'items/generators/currency' | |||||
'items/generators/currency', | |||||
'items/generators/effects' | |||||
], function ( | ], 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 materialGenerators = [g6, g8]; | ||||
var spellGenerators = [g1, g9]; | var spellGenerators = [g1, g9]; | ||||
var currencyGenerators = [g10]; | 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([ | define([ | ||||
], function( | |||||
], function ( | |||||
) { | ) { | ||||
return { | 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([ | define([ | ||||
], function( | |||||
], function ( | |||||
) { | ) { | ||||
return { | 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 { | return { | ||||
id: 'theWinterMan', | id: 'theWinterMan', | ||||
name: 'The Winter Man', | name: 'The Winter Man', | ||||
description: ``, | |||||
description: `Bearer of Gifts, Friend of the Downtrodden and the Watcher in the Snow.`, | |||||
rewards: { | rewards: { | ||||
@@ -23,6 +23,12 @@ define([ | |||||
reward: 'Perfect Level 10 Ring', | reward: 'Perfect Level 10 Ring', | ||||
setSize: 3, | setSize: 3, | ||||
mobName: 'flamingo' | mobName: 'flamingo' | ||||
}, | |||||
'Benthic Incantation': { | |||||
chance: 0.05, | |||||
reward: `Princess Morgawsa's Trident`, | |||||
setSize: 7, | |||||
zone: 'estuary' | |||||
} | } | ||||
}; | }; | ||||
@@ -132,6 +138,27 @@ define([ | |||||
perfection: 1, | perfection: 1, | ||||
slot: 'finger' | 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] | |||||
} | |||||
}] | |||||
}); | |||||
} | } | ||||
} | } | ||||
}; | }; | ||||