@@ -12,7 +12,7 @@ define([ | |||
events.emit('onGetItems', this.items); | |||
}, | |||
extend: function (blueprint) { | |||
var rerender = false; | |||
let rerender = false; | |||
if (blueprint.destroyItems) { | |||
rerender = true; | |||
@@ -20,15 +20,15 @@ define([ | |||
} | |||
if (blueprint.getItems) { | |||
var items = this.items; | |||
var newItems = blueprint.getItems || []; | |||
var nLen = newItems.length; | |||
let items = this.items; | |||
let newItems = blueprint.getItems || []; | |||
let nLen = newItems.length; | |||
for (var i = 0; i < nLen; i++) { | |||
var nItem = newItems[i]; | |||
for (let i = 0; i < nLen; i++) { | |||
let nItem = newItems[i]; | |||
var nId = nItem.id; | |||
var findItem = items.find(function (item) { | |||
let findItem = items.find(function (item) { | |||
return (item.id == nId); | |||
}); | |||
if (findItem) { | |||
@@ -40,9 +40,8 @@ define([ | |||
); | |||
} | |||
for (var p in findItem) { | |||
for (let p in findItem) | |||
delete findItem[p]; | |||
} | |||
$.extend(true, findItem, nItem); | |||
@@ -62,21 +61,19 @@ define([ | |||
}, | |||
equipItemErrors: function (item) { | |||
var errors = []; | |||
var stats = this.obj.stats.values; | |||
var originalValues = this.obj.stats.originalValues || this.obj.stats.values; | |||
let errors = []; | |||
let stats = this.obj.stats.values; | |||
var playerLevel = (stats.originalLevel || stats.level); | |||
if (item.level > playerLevel) | |||
if (item.level > stats.level) | |||
errors.push('level'); | |||
if ((item.requires) && (originalValues[item.requires[0].stat] < item.requires[0].value)) | |||
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; | |||
})) | |||
return f.noEquip; | |||
})) | |||
errors.push('faction'); | |||
} | |||
@@ -86,7 +86,7 @@ define([ | |||
this.find('.slot').addClass('empty'); | |||
var skipSpellId = 0; | |||
let skipSpellId = 0; | |||
this.find('[slot]') | |||
.removeData('item') | |||
@@ -102,9 +102,9 @@ define([ | |||
this.find('[slot]').toArray().forEach(function (el) { | |||
el = $(el); | |||
var slot = el.attr('slot'); | |||
var newItems = window.player.inventory.items.some(function (i) { | |||
var checkSlot = slot; | |||
let slot = el.attr('slot'); | |||
let newItems = window.player.inventory.items.some(function (i) { | |||
let checkSlot = slot; | |||
if (slot.indexOf('finger') == 0) | |||
slot = 'finger'; | |||
else if (slot == 'oneHanded') | |||
@@ -119,29 +119,29 @@ define([ | |||
items | |||
.filter(function (item) { | |||
var runeSlot = item.runeSlot; | |||
let runeSlot = item.runeSlot; | |||
if ((runeSlot != null) && (item.slot)) | |||
skipSpellId = runeSlot; | |||
return ((item.eq) && ((item.slot) || (item.runeSlot != null))); | |||
}, this) | |||
.forEach(function (item) { | |||
var imgX = -item.sprite[0] * 64; | |||
var imgY = -item.sprite[1] * 64; | |||
let imgX = -item.sprite[0] * 64; | |||
let imgY = -item.sprite[1] * 64; | |||
var slot = item.slot; | |||
let slot = item.slot; | |||
if (!slot) { | |||
var runeSlot = item.runeSlot; | |||
let runeSlot = item.runeSlot; | |||
if (runeSlot > skipSpellId) | |||
runeSlot--; | |||
slot = 'rune-' + runeSlot; | |||
} | |||
var spritesheet = item.spritesheet || '../../../images/items.png'; | |||
let spritesheet = item.spritesheet || '../../../images/items.png'; | |||
slot = item.equipSlot || slot; | |||
var elSlot = this.find('[slot="' + slot + '"]'); | |||
let elSlot = this.find('[slot="' + slot + '"]'); | |||
elSlot | |||
.data('item', item) | |||
.removeClass('empty show-default-icon') | |||
@@ -158,26 +158,25 @@ define([ | |||
if (el.currentTarget) | |||
el = $(el.currentTarget).parent(); | |||
var slot = el.attr('slot'); | |||
var isRune = (slot.indexOf('rune') == 0); | |||
let slot = el.attr('slot'); | |||
let isRune = (slot.indexOf('rune') == 0); | |||
var container = this.find('.itemList') | |||
let container = this.find('.itemList') | |||
.empty() | |||
.show(); | |||
this.hoverCompare = el.data('item'); | |||
var items = this.items | |||
let items = this.items | |||
.filter(function (item) { | |||
if (isRune) | |||
return ((!item.slot) && (item.spell) && (!item.eq)); | |||
else { | |||
var checkSlot = (slot.indexOf('finger') == 0) ? 'finger' : slot; | |||
if (slot == 'oneHanded') | |||
return ((!item.eq) && ((item.slot == 'oneHanded') || (item.slot == 'twoHanded'))); | |||
let checkSlot = (slot.indexOf('finger') == 0) ? 'finger' : slot; | |||
if (slot == 'oneHanded') | |||
return ((!item.eq) && ((item.slot == 'oneHanded') || (item.slot == 'twoHanded'))); | |||
return ((item.slot == checkSlot) && (!item.eq)); | |||
} | |||
return ((item.slot == checkSlot) && (!item.eq)); | |||
}, this); | |||
items.splice(0, 0, { | |||
name: 'None', | |||
@@ -190,13 +189,13 @@ define([ | |||
items | |||
.forEach(function (item) { | |||
var sprite = item.sprite || [7, 0]; | |||
let sprite = item.sprite || [7, 0]; | |||
var spriteSheet = item.empty ? '../../../images/uiIcons.png' : item.spritesheet || '../../../images/items.png'; | |||
var imgX = -sprite[0] * 64; | |||
var imgY = -sprite[1] * 64; | |||
let spriteSheet = item.empty ? '../../../images/uiIcons.png' : item.spritesheet || '../../../images/items.png'; | |||
let imgX = -sprite[0] * 64; | |||
let imgY = -sprite[1] * 64; | |||
var el = $('<div class="slot"><div class="icon"></div></div>') | |||
let el = $('<div class="slot"><div class="icon"></div></div>') | |||
.appendTo(container); | |||
el | |||
@@ -217,7 +216,7 @@ define([ | |||
}, | |||
equipItem: function (item, slot) { | |||
var isNew = window.player.inventory.items.some(function (i) { | |||
let isNew = window.player.inventory.items.some(function (i) { | |||
return ((i.equipSlot == slot) && (i.isNew)); | |||
}); | |||
if (!isNew) | |||
@@ -228,9 +227,9 @@ define([ | |||
return; | |||
} | |||
var cpn = 'equipment'; | |||
var method = 'equip'; | |||
var data = item.id; | |||
let cpn = 'equipment'; | |||
let method = 'equip'; | |||
let data = item.id; | |||
if (item.empty) | |||
method = 'unequip'; | |||
@@ -247,10 +246,9 @@ define([ | |||
if (!this.hoverCompare) { | |||
this.find('.itemList').hide(); | |||
return; | |||
} else { | |||
method = 'unlearnAbility'; | |||
data.itemId = this.hoverCompare.id; | |||
} | |||
} | |||
method = 'unlearnAbility'; | |||
data.itemId = this.hoverCompare.id; | |||
} | |||
} else if (item.slot == 'finger') { | |||
data = { | |||
@@ -282,7 +280,7 @@ define([ | |||
el.find('.icon').removeClass('new'); | |||
} | |||
var ttPos = null; | |||
let ttPos = null; | |||
if (e) { | |||
ttPos = { | |||
x: ~~(e.clientX + 32), | |||
@@ -306,21 +304,17 @@ define([ | |||
if (!this.shown) | |||
return; | |||
var container = this.el.find('.stats'); | |||
let container = this.el.find('.stats'); | |||
container | |||
.children('*:not(.tabs)') | |||
.remove(); | |||
var xpRemaining = (stats.xpMax - stats.xp).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); | |||
var level = stats.level; | |||
if (stats.originalLevel) | |||
level = stats.originalLevel + ' (' + stats.level + ')'; | |||
let xpRemaining = (stats.xpMax - stats.xp).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); | |||
var newStats = { | |||
let newStats = { | |||
basic: { | |||
level: level, | |||
level: stats.level, | |||
'next level': xpRemaining + 'xp', | |||
gap1: '', | |||
gold: window.player.trade.gold, | |||
@@ -353,7 +347,7 @@ define([ | |||
'spell increase': stats.spellPercent + '%', | |||
gap3: '', | |||
'attack speed': (100 + stats.attackSpeed) + '%', | |||
'cast speed': (100 + stats.castSpeed) + '%', | |||
'cast speed': (100 + stats.castSpeed) + '%' | |||
}, | |||
defense: { | |||
armor: stats.armor, | |||
@@ -381,18 +375,18 @@ define([ | |||
} | |||
}[this.find('.tab.selected').html()]; | |||
for (var s in newStats) { | |||
var label = s + ': '; | |||
var value = newStats[s]; | |||
for (let s in newStats) { | |||
let label = s + ': '; | |||
let value = newStats[s]; | |||
var isGap = false; | |||
let isGap = false; | |||
if (label.indexOf('gap') == 0) { | |||
isGap = true; | |||
label = ''; | |||
value = ''; | |||
} | |||
var row = $('<div class="stat"><font class="q0">' + label + '</font><font color="#999">' + value + '</font></div>') | |||
let row = $('<div class="stat"><font class="q0">' + label + '</font><font color="#999">' + value + '</font></div>') | |||
.appendTo(container); | |||
if (s == 'gold') | |||
@@ -23,10 +23,10 @@ define([ | |||
}, | |||
onGetPortrait: function (portrait) { | |||
var spritesheet = portrait.spritesheet || '../../../images/portraitIcons.png'; | |||
let spritesheet = portrait.spritesheet || '../../../images/portraitIcons.png'; | |||
var x = portrait.x * -64; | |||
var y = portrait.y * -64; | |||
let x = portrait.x * -64; | |||
let y = portrait.y * -64; | |||
this.find('.portrait') | |||
.css({ | |||
@@ -36,9 +36,9 @@ define([ | |||
}, | |||
build: function () { | |||
var stats = this.stats; | |||
let stats = this.stats; | |||
var boxes = this.find('.statBox'); | |||
let boxes = this.find('.statBox'); | |||
[ | |||
stats.hp / stats.hpMax, | |||
@@ -53,11 +53,7 @@ define([ | |||
boxes.eq(0).find('.text').html(Math.floor(stats.hp) + '/' + ~~stats.hpMax); | |||
boxes.eq(1).find('.text').html(Math.floor(stats.mana) + '/' + ~~stats.manaMax); | |||
var level = stats.level; | |||
if ((stats.originalLevel) && (stats.originalLevel != level)) | |||
level = stats.originalLevel + ' (' + stats.level + ')'; | |||
boxes.eq(2).find('.text').html('level: ' + level); | |||
boxes.eq(2).find('.text').html('level: ' + stats.level); | |||
} | |||
} | |||
}; | |||
}); |
@@ -15,7 +15,7 @@ define([ | |||
tplTooltip, | |||
input | |||
) { | |||
var qualityColors = [{ | |||
let qualityColors = [{ | |||
r: 252, | |||
g: 252, | |||
b: 252 | |||
@@ -77,20 +77,20 @@ define([ | |||
}, | |||
build: function () { | |||
var container = this.el.find('.grid') | |||
let container = this.el.find('.grid') | |||
.empty(); | |||
var items = this.items | |||
let items = this.items | |||
.filter(function (item) { | |||
return !item.eq; | |||
}); | |||
var iLen = Math.max(items.length, 50); | |||
let iLen = Math.max(items.length, 50); | |||
var rendered = []; | |||
let rendered = []; | |||
for (var i = 0; i < iLen; i++) { | |||
var item = items.find(function (item) { | |||
let item = items.find(function (item) { | |||
return ((item.pos != null) && (item.pos == i)); | |||
}); | |||
@@ -106,17 +106,16 @@ define([ | |||
.remove(); | |||
continue; | |||
} else { | |||
} else | |||
rendered.push(item); | |||
} | |||
var imgX = -item.sprite[0] * 64; | |||
var imgY = -item.sprite[1] * 64; | |||
let imgX = -item.sprite[0] * 64; | |||
let imgY = -item.sprite[1] * 64; | |||
var itemEl = $(tplItem) | |||
.appendTo(container); | |||
var spritesheet = item.spritesheet || '../../../images/items.png'; | |||
let spritesheet = item.spritesheet || '../../../images/items.png'; | |||
if (!item.spritesheet) { | |||
if (item.material) | |||
spritesheet = '../../../images/materials.png'; | |||
@@ -152,7 +151,7 @@ define([ | |||
}, | |||
onClick: function (item) { | |||
var msg = { | |||
let msg = { | |||
item: item, | |||
success: true | |||
}; | |||
@@ -190,26 +189,26 @@ define([ | |||
events.emit('onHideItemTooltip', this.hoverItem); | |||
this.hoverItem = null; | |||
} else if (this.dragItem) { | |||
var method = 'moveItem'; | |||
let method = 'moveItem'; | |||
if ((this.hoverCell) && (this.hoverCell[0] != this.dragItem[0])) { | |||
var placeholder = $('<div></div>') | |||
let placeholder = $('<div></div>') | |||
.insertAfter(this.dragItem); | |||
this.dragItem.insertBefore(this.hoverCell); | |||
this.hoverCell.insertBefore(placeholder); | |||
placeholder.remove(); | |||
var msgs = [{ | |||
let msgs = [{ | |||
id: this.dragItem.data('item').id, | |||
pos: this.dragItem.index() | |||
}]; | |||
this.items.find(function (i) { | |||
return (i.id == this.dragItem.data('item').id) | |||
return (i.id == this.dragItem.data('item').id); | |||
}, this).pos = this.dragItem.index(); | |||
var hoverCellItem = this.hoverCell.data('item'); | |||
let hoverCellItem = this.hoverCell.data('item'); | |||
if (hoverCellItem) { | |||
if ((hoverCellItem.name != this.dragItem.data('item').name) || (!hoverCellItem.quantity)) { | |||
msgs.push({ | |||
@@ -218,13 +217,13 @@ define([ | |||
}); | |||
this.items.find(function (i) { | |||
return (i.id == hoverCellItem.id) | |||
return (i.id == hoverCellItem.id); | |||
}, this).pos = this.hoverCell.index(); | |||
} else { | |||
method = 'combineStacks'; | |||
msgs = { | |||
fromId: this.dragItem.data('item').id, | |||
toId: hoverCellItem.id, | |||
toId: hoverCellItem.id | |||
}; | |||
} | |||
} | |||
@@ -254,7 +253,7 @@ define([ | |||
if (!this.dragEl) | |||
return; | |||
var offset = this.find('.grid').offset(); | |||
let offset = this.find('.grid').offset(); | |||
this.dragEl.css({ | |||
left: e.clientX - offset.left - 40, | |||
@@ -264,7 +263,7 @@ define([ | |||
}, | |||
showContext: function (item, e) { | |||
var menuItems = { | |||
let menuItems = { | |||
drop: { | |||
text: 'drop', | |||
callback: this.performItemAction.bind(this, item, 'dropItem') | |||
@@ -320,7 +319,7 @@ define([ | |||
if (item.active) | |||
menuItems.activate.text = 'deactivate'; | |||
var config = []; | |||
let config = []; | |||
if (item.ability) | |||
config.push(menuItems.learn); | |||
@@ -369,7 +368,7 @@ define([ | |||
}, | |||
splitStackStart: function (item) { | |||
var box = this.find('.split-box').show(); | |||
let box = this.find('.split-box').show(); | |||
box.data('item', item); | |||
box.find('.amount') | |||
@@ -378,7 +377,7 @@ define([ | |||
}, | |||
splitStackEnd: function (cancel, e) { | |||
var box = this.find('.split-box'); | |||
let box = this.find('.split-box'); | |||
if ((cancel) || (!e) || (e.target != box.find('.btnSplit')[0])) { | |||
if ((cancel) && (!$(e.target).hasClass('button'))) | |||
@@ -404,8 +403,8 @@ define([ | |||
}, | |||
onChangeStackAmount: function (e, amount) { | |||
var item = this.find('.split-box').data('item'); | |||
var delta = e ? ((e.originalEvent.deltaY > 0) ? -1 : 1) : amount; | |||
let item = this.find('.split-box').data('item'); | |||
let delta = e ? ((e.originalEvent.deltaY > 0) ? -1 : 1) : amount; | |||
if (this.shiftDown) | |||
delta *= 10; | |||
var amount = this.find('.split-box .amount'); | |||
@@ -414,12 +413,12 @@ define([ | |||
}, | |||
onEnterStackAmount: function (e) { | |||
var el = this.find('.split-box .amount'); | |||
var val = el.val(); | |||
let el = this.find('.split-box .amount'); | |||
let val = el.val(); | |||
if (val != ~~val) | |||
el.val(''); | |||
else if (val) { | |||
var item = this.find('.split-box').data('item'); | |||
let item = this.find('.split-box').data('item'); | |||
if (val < 0) | |||
val = ''; | |||
else if (val > item.quantity - 1) | |||
@@ -454,7 +453,7 @@ define([ | |||
if (!item) | |||
return; | |||
var ttPos = null; | |||
let ttPos = null; | |||
if (el) { | |||
if (el.hasClass('new')) { | |||
@@ -463,14 +462,14 @@ define([ | |||
delete item.isNew; | |||
} | |||
var elOffset = el.offset(); | |||
let elOffset = el.offset(); | |||
ttPos = { | |||
x: ~~(e.clientX + 32), | |||
y: ~~(e.clientY) | |||
}; | |||
} | |||
var compare = null; | |||
let compare = null; | |||
if (item.slot) { | |||
compare = this.items.find(function (i) { | |||
return ((i.eq) && (i.slot == item.slot)); | |||
@@ -478,51 +477,50 @@ define([ | |||
// check special cases for mismatched weapon/offhand scenarios (only valid when comparing) | |||
if ((!compare) && (this.shiftDown)) { | |||
var equippedTwoHanded = this.items.find(function (i) { | |||
let equippedTwoHanded = this.items.find(function (i) { | |||
return ((i.eq) && (i.slot == 'twoHanded')); | |||
}); | |||
var equippedOneHanded = this.items.find(function (i) { | |||
let equippedOneHanded = this.items.find(function (i) { | |||
return ((i.eq) && (i.slot == 'oneHanded')); | |||
}); | |||
var equippedOffhand = this.items.find(function (i) { | |||
let equippedOffhand = this.items.find(function (i) { | |||
return ((i.eq) && (i.slot == 'offHand')); | |||
}); | |||
if (item.slot == 'twoHanded') { | |||
if (!equippedOneHanded) { | |||
if (!equippedOneHanded) | |||
compare = equippedOffhand; | |||
} else if (!equippedOffhand) { | |||
else if (!equippedOffhand) | |||
compare = equippedOneHanded; | |||
} else { | |||
else { | |||
// compare against oneHanded and offHand combined by creating a virtual item that is the sum of the two | |||
compare = $.extend(true, {}, equippedOneHanded); | |||
compare.refItem = equippedOneHanded; | |||
for (var s in equippedOffhand.stats) { | |||
for (let s in equippedOffhand.stats) { | |||
if (!compare.stats[s]) | |||
compare.stats[s] = 0; | |||
compare.stats[s] += equippedOffhand.stats[s] | |||
compare.stats[s] += equippedOffhand.stats[s]; | |||
} | |||
} | |||
} | |||
if (item.slot == 'oneHanded') { | |||
if (item.slot == 'oneHanded') | |||
compare = equippedTwoHanded; | |||
} | |||
// this case is kind of ugly, but we don't want to go in when comparing an offHand to (oneHanded + empty offHand) - that should just use the normal compare which is offHand to empty | |||
if ((item.slot == 'offHand') && (equippedTwoHanded)) { | |||
// since we're comparing an offhand to an equipped Twohander, we need to clone the 'spell' values over (setting damage to zero) so that we can properly display how much damage | |||
// the player would lose by switching to the offhand (which would remove the twoHander) | |||
// keep a reference to the original item for use in onHideToolTip | |||
var spellClone = $.extend(true, {}, equippedTwoHanded.spell); | |||
let spellClone = $.extend(true, {}, equippedTwoHanded.spell); | |||
spellClone.name = ''; | |||
spellClone.values['damage'] = 0; | |||
spellClone.values.damage = 0; | |||
var clone = $.extend(true, {}, item, { | |||
let clone = $.extend(true, {}, item, { | |||
spell: spellClone | |||
}); | |||
clone.refItem = item; | |||
@@ -544,7 +542,7 @@ define([ | |||
}, | |||
onDestroyItems: function (itemIds) { | |||
itemIds.forEach(function (id) { | |||
var item = this.items.find(i => i.id == id); | |||
let item = this.items.find(i => i.id == id); | |||
if (item == this.hoverItem) | |||
this.hideTooltip(); | |||
@@ -584,9 +582,6 @@ define([ | |||
}, | |||
performItemAction: function (item, action) { | |||
var stats = window.player.stats.values; | |||
var playerLevel = stats.originalLevel || stats.level; | |||
if (!item) | |||
return; | |||
else if ((action == 'equip') && ((item.material) || (item.quest) || (item.type == 'mtx') || (!window.player.inventory.canEquipItem(item)))) | |||
@@ -596,7 +591,7 @@ define([ | |||
else if ((action == 'activateMtx') && (item.type != 'mtx')) | |||
return; | |||
var cpn = 'inventory'; | |||
let cpn = 'inventory'; | |||
if (action == 'equip') | |||
cpn = 'equipment'; | |||
@@ -32,9 +32,9 @@ define([ | |||
if (!this.doAutoEq) | |||
return; | |||
var stats = this.obj.stats.values; | |||
let stats = this.obj.stats.values; | |||
var item = this.obj.inventory.findItem(itemId); | |||
let item = this.obj.inventory.findItem(itemId); | |||
if (!item) | |||
return; | |||
else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (!this.obj.inventory.canEquipItem(item))) { | |||
@@ -42,7 +42,7 @@ define([ | |||
return; | |||
} | |||
var currentEqId = this.eq[item.slot]; | |||
let currentEqId = this.eq[item.slot]; | |||
if (currentEqId == null) { | |||
this.equip(itemId); | |||
return true; | |||
@@ -50,13 +50,13 @@ define([ | |||
}, | |||
equip: function (itemId) { | |||
var slot = null; | |||
let slot = null; | |||
if (typeof (itemId) == 'object') { | |||
slot = itemId.slot; | |||
itemId = itemId.itemId; | |||
} | |||
var item = this.obj.inventory.findItem(itemId); | |||
let item = this.obj.inventory.findItem(itemId); | |||
if (!item) | |||
return; | |||
else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (!this.obj.inventory.canEquipItem(item))) { | |||
@@ -81,7 +81,7 @@ define([ | |||
} | |||
} | |||
var equipMsg = { | |||
let equipMsg = { | |||
success: true, | |||
item: item | |||
}; | |||
@@ -103,8 +103,8 @@ define([ | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item); | |||
if (slot == 'finger') { | |||
var f1 = (this.eq['finger-1'] != null); | |||
var f2 = (this.eq['finger-2'] != null); | |||
let f1 = (this.eq['finger-1'] != null); | |||
let f2 = (this.eq['finger-2'] != null); | |||
if ((f1) && (f2)) | |||
slot = 'finger-1'; | |||
@@ -114,7 +114,7 @@ define([ | |||
slot = 'finger-2'; | |||
} | |||
var spellId = null; | |||
let spellId = null; | |||
var currentEqId = this.eq[slot]; | |||
var currentEq = this.obj.inventory.findItem(currentEqId); | |||
if (currentEq == item) | |||
@@ -124,15 +124,9 @@ define([ | |||
this.unequip(currentEqId); | |||
} | |||
var stats = item.stats; | |||
if (this.obj.player) { | |||
var maxLevel = this.obj.instance.zone.level[1]; | |||
if (maxLevel < item.level) | |||
stats = generatorStats.rescale(item, maxLevel); | |||
} | |||
for (var s in stats) { | |||
var val = stats[s]; | |||
let stats = item.stats; | |||
for (let s in stats) { | |||
let val = stats[s]; | |||
this.obj.stats.addStat(s, val); | |||
} | |||
@@ -151,7 +145,7 @@ define([ | |||
if (item.spell) | |||
this.obj.inventory.learnAbility(itemId, item.runeSlot); | |||
else { | |||
var result = item; | |||
let result = item; | |||
if (item.effects) { | |||
result = extend(true, {}, item); | |||
result.effects = result.effects.map(e => ({ | |||
@@ -159,14 +153,14 @@ define([ | |||
text: e.text, | |||
properties: e.properties | |||
})); | |||
var reputation = this.obj.reputation; | |||
let reputation = this.obj.reputation; | |||
if (result.factions) { | |||
result.factions = result.factions.map(function (f) { | |||
var faction = reputation.getBlueprint(f.id); | |||
var factionTier = reputation.getTier(f.id); | |||
let faction = reputation.getBlueprint(f.id); | |||
let factionTier = reputation.getTier(f.id); | |||
var noEquip = null; | |||
let noEquip = null; | |||
if (factionTier < f.tier) | |||
noEquip = true; | |||
@@ -187,8 +181,8 @@ define([ | |||
this.obj.fireEvent('afterEquipItem', item); | |||
}, | |||
unequip: function (itemId) { | |||
var item = itemId; | |||
var slot = null; | |||
let item = itemId; | |||
let slot = null; | |||
if (typeof (itemId) == 'object') { | |||
slot = itemId.slot; | |||
itemId = itemId.itemId; | |||
@@ -200,19 +194,14 @@ define([ | |||
if (!item) | |||
return; | |||
var stats = item.stats; | |||
if (this.obj.player) { | |||
var maxLevel = this.obj.instance.zone.level[1]; | |||
if (maxLevel < item.level) | |||
stats = generatorStats.rescale(item, maxLevel); | |||
} | |||
let stats = item.stats; | |||
delete item.eq; | |||
delete this.eq[item.equipSlot]; | |||
delete item.equipSlot; | |||
for (var s in stats) { | |||
var val = stats[s]; | |||
for (let s in stats) { | |||
let val = stats[s]; | |||
this.obj.stats.addStat(s, -val); | |||
} | |||
@@ -226,38 +215,36 @@ define([ | |||
if (item.spell) { | |||
item.eq = true; | |||
this.obj.inventory.unlearnAbility(itemId, item.runeSlot); | |||
} else { | |||
if (!item.effects) | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item); | |||
else { | |||
var result = extend(true, {}, item); | |||
result.effects = result.effects.map(e => ({ | |||
factionId: e.factionId, | |||
text: e.text, | |||
properties: e.properties | |||
})); | |||
var reputation = this.obj.reputation; | |||
if (result.factions) { | |||
result.factions = result.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; | |||
return { | |||
name: faction.name, | |||
tier: f.tier, | |||
tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier], | |||
noEquip: noEquip | |||
}; | |||
}, this); | |||
} | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', result); | |||
} else if (!item.effects) | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item); | |||
else { | |||
let result = extend(true, {}, item); | |||
result.effects = result.effects.map(e => ({ | |||
factionId: e.factionId, | |||
text: e.text, | |||
properties: e.properties | |||
})); | |||
let reputation = this.obj.reputation; | |||
if (result.factions) { | |||
result.factions = result.factions.map(function (f) { | |||
let faction = reputation.getBlueprint(f.id); | |||
let factionTier = reputation.getTier(f.id); | |||
let noEquip = null; | |||
if (factionTier < f.tier) | |||
noEquip = true; | |||
return { | |||
name: faction.name, | |||
tier: f.tier, | |||
tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier], | |||
noEquip: noEquip | |||
}; | |||
}, this); | |||
} | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', result); | |||
} | |||
this.obj.spellbook.calcDps(); | |||
@@ -265,27 +252,27 @@ define([ | |||
this.obj.fireEvent('afterUnequipItem', item); | |||
}, | |||
unequipAll: function () { | |||
var eq = this.eq; | |||
let eq = this.eq; | |||
Object.keys(this.eq).forEach(function (slot) { | |||
this.unequip(eq[slot]); | |||
}, this); | |||
}, | |||
unequipAttrRqrGear: function () { | |||
var inventory = this.obj.inventory; | |||
let inventory = this.obj.inventory; | |||
var eq = this.eq; | |||
let eq = this.eq; | |||
Object.keys(this.eq).forEach(function (slot) { | |||
var itemId = eq[slot]; | |||
var item = inventory.findItem(itemId); | |||
let itemId = eq[slot]; | |||
let item = inventory.findItem(itemId); | |||
if (!item) | |||
return; | |||
var errors = inventory.equipItemErrors(item); | |||
let errors = inventory.equipItemErrors(item); | |||
if (errors.length > 0) { | |||
this.unequip(itemId); | |||
var message = ({ | |||
let message = ({ | |||
int: `You suddenly feel too stupid to wear your ${item.name}`, | |||
str: `Your weak body can no longer equip your ${item.name}`, | |||
dex: `Your sluggish physique cannot possibly equip your ${item.name}` | |||
@@ -304,18 +291,18 @@ define([ | |||
}, | |||
unequipFactionGear: function (factionId, tier) { | |||
var inventory = this.obj.inventory; | |||
let inventory = this.obj.inventory; | |||
var eq = this.eq; | |||
let eq = this.eq; | |||
Object.keys(this.eq).forEach(function (slot) { | |||
var itemId = eq[slot]; | |||
var item = inventory.findItem(itemId); | |||
let itemId = eq[slot]; | |||
let item = inventory.findItem(itemId); | |||
var factions = item.factions; | |||
let factions = item.factions; | |||
if (!factions) | |||
return; | |||
var findFaction = factions.find(f => f.id == factionId); | |||
let findFaction = factions.find(f => f.id == factionId); | |||
if (!findFaction) | |||
return; | |||
@@ -332,38 +319,6 @@ define([ | |||
}, [this.obj.serverId]); | |||
} | |||
}, this); | |||
}, | |||
rescale: function (level) { | |||
var items = this.obj.inventory.items; | |||
var stats = {}; | |||
var eq = this.eq; | |||
for (var p in eq) { | |||
var item = items.find(i => (i.id == eq[p])); | |||
if ((!item.slot) || (item.slot == 'tool')) { | |||
continue; | |||
} | |||
var item = items.find(i => (i.id == eq[p])); | |||
var nItemStats = item.stats; | |||
if (item.level > level) | |||
nItemStats = generatorStats.rescale(item, level); | |||
var tempItem = extend(true, {}, item); | |||
tempItem.stats = extend(true, {}, nItemStats); | |||
this.obj.fireEvent('afterRescaleItemStats', tempItem); | |||
for (var s in tempItem.stats) { | |||
if (!stats[s]) | |||
stats[s] = 0; | |||
stats[s] += tempItem.stats[s]; | |||
} | |||
} | |||
return stats; | |||
} | |||
}; | |||
}); |
@@ -29,13 +29,13 @@ define([ | |||
//Base Methods | |||
init: function (blueprint, isTransfer) { | |||
var items = blueprint.items || []; | |||
var iLen = items.length; | |||
let items = blueprint.items || []; | |||
let iLen = items.length; | |||
//Spells should be sorted so they're EQ'd in the right order | |||
items.sort(function (a, b) { | |||
var aId = (a.spellId != null) ? ~~a.spellId : 9999; | |||
var bId = (b.spellId != null) ? ~~b.spellId : 9999; | |||
let aId = (a.spellId != null) ? ~~a.spellId : 9999; | |||
let bId = (b.spellId != null) ? ~~b.spellId : 9999; | |||
return (aId - bId); | |||
}); | |||
@@ -44,18 +44,17 @@ define([ | |||
if ((item.pos >= this.inventorySize) || (item.eq)) | |||
delete item.pos; | |||
while (item.name.indexOf(`''`) > -1) { | |||
item.name = item.name.replace(`''`, `'`); | |||
} | |||
while (item.name.indexOf('\'\'') > -1) | |||
item.name = item.name.replace('\'\'', '\''); | |||
} | |||
this.hookItemEvents(items); | |||
for (var i = 0; i < iLen; i++) { | |||
var item = items[i]; | |||
var pos = item.pos; | |||
let pos = item.pos; | |||
var newItem = this.getItem(item, true, true); | |||
let newItem = this.getItem(item, true, true); | |||
newItem.pos = pos; | |||
} | |||
@@ -82,13 +81,13 @@ define([ | |||
if (!self) | |||
return null; | |||
var reputation = this.obj.reputation; | |||
let reputation = this.obj.reputation; | |||
return { | |||
type: 'inventory', | |||
items: this.items | |||
.map(function (i) { | |||
var item = extend(true, {}, i); | |||
let item = extend(true, {}, i); | |||
if (item.effects) { | |||
item.effects = item.effects.map(e => ({ | |||
@@ -103,10 +102,10 @@ define([ | |||
if (item.factions) { | |||
item.factions = item.factions.map(function (f) { | |||
var faction = reputation.getBlueprint(f.id); | |||
var factionTier = reputation.getTier(f.id); | |||
let faction = reputation.getBlueprint(f.id); | |||
let factionTier = reputation.getTier(f.id); | |||
var noEquip = null; | |||
let noEquip = null; | |||
if (factionTier < f.tier) | |||
noEquip = true; | |||
@@ -129,10 +128,10 @@ define([ | |||
}, | |||
update: function () { | |||
var items = this.items; | |||
var iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var item = items[i]; | |||
let items = this.items; | |||
let iLen = items.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let item = items[i]; | |||
if (!item.cd) | |||
continue; | |||
@@ -145,7 +144,7 @@ define([ | |||
//Client Actions | |||
enchantItem: function (msg) { | |||
var item = this.findItem(msg.itemId); | |||
let item = this.findItem(msg.itemId); | |||
if ((!item) || (!item.slot) || (item.eq) || (item.noAugment) || ((msg.action == 'scour') && (item.power == 0))) { | |||
this.resolveCallback(msg); | |||
return; | |||
@@ -155,8 +154,8 @@ define([ | |||
}, | |||
getEnchantMaterials: function (msg) { | |||
var result = []; | |||
var item = this.findItem(msg.itemId); | |||
let result = []; | |||
let item = this.findItem(msg.itemId); | |||
if ((item) && (item.slot)) | |||
result = enchanter.getEnchantMaterials(item, msg.action); | |||
@@ -165,24 +164,24 @@ define([ | |||
learnAbility: function (itemId, runeSlot) { | |||
if (itemId.itemId != null) { | |||
var msg = itemId; | |||
let msg = itemId; | |||
itemId = msg.itemId; | |||
runeSlot = msg.slot; | |||
} | |||
var item = this.findItem(itemId); | |||
var statValues = this.obj.stats.values; | |||
let item = this.findItem(itemId); | |||
let statValues = this.obj.stats.values; | |||
if (!item) | |||
return; | |||
else if (!item.spell) { | |||
item.eq = false; | |||
return; | |||
} else if (item.level > (statValues.originalLevel || statValues.level)) { | |||
} else if (item.level > statValues.level) { | |||
item.eq = false; | |||
return; | |||
} | |||
var learnMsg = { | |||
let learnMsg = { | |||
success: true, | |||
item: item | |||
}; | |||
@@ -200,7 +199,7 @@ define([ | |||
return; | |||
} | |||
var spellbook = this.obj.spellbook; | |||
let spellbook = this.obj.spellbook; | |||
if ((item.slot == 'twoHanded') || (item.slot == 'oneHanded')) | |||
runeSlot = 0; | |||
@@ -214,7 +213,7 @@ define([ | |||
} | |||
} | |||
var currentEq = this.items.find(i => (i.runeSlot == runeSlot)); | |||
let currentEq = this.items.find(i => (i.runeSlot == runeSlot)); | |||
if (currentEq) { | |||
spellbook.removeSpellById(runeSlot); | |||
delete currentEq.eq; | |||
@@ -232,7 +231,7 @@ define([ | |||
}, | |||
activateMtx: function (itemId) { | |||
var item = this.findItem(itemId); | |||
let item = this.findItem(itemId); | |||
if (!item) | |||
return; | |||
else if (item.type != 'mtx') { | |||
@@ -246,13 +245,13 @@ define([ | |||
}, | |||
splitStack: function (msg) { | |||
var item = this.findItem(msg.itemId); | |||
let item = this.findItem(msg.itemId); | |||
if (!item) | |||
return; | |||
else if ((!item.quantity) || (item.quantity <= msg.stackSize) || (msg.stackSize < 1)) | |||
return; | |||
var newItem = extend(true, {}, item); | |||
let newItem = extend(true, {}, item); | |||
item.quantity -= msg.stackSize; | |||
newItem.quantity = msg.stackSize; | |||
@@ -262,8 +261,8 @@ define([ | |||
}, | |||
combineStacks: function (msg) { | |||
var fromItem = this.findItem(msg.fromId); | |||
var toItem = this.findItem(msg.toId); | |||
let fromItem = this.findItem(msg.fromId); | |||
let toItem = this.findItem(msg.toId); | |||
if ((!fromItem) || (!toItem)) | |||
return; | |||
@@ -276,7 +275,7 @@ define([ | |||
}, | |||
useItem: function (itemId) { | |||
var item = this.findItem(itemId); | |||
let item = this.findItem(itemId); | |||
if (!item) | |||
return; | |||
@@ -285,7 +284,7 @@ define([ | |||
process.send({ | |||
method: 'events', | |||
data: { | |||
'onGetAnnouncement': [{ | |||
onGetAnnouncement: [{ | |||
obj: { | |||
msg: 'That item is on cooldown' | |||
}, | |||
@@ -306,7 +305,7 @@ define([ | |||
}); | |||
} | |||
var result = {}; | |||
let result = {}; | |||
this.obj.instance.eventEmitter.emit('onBeforeUseItem', this.obj, item, result); | |||
if (item.type == 'consumable') { | |||
@@ -323,7 +322,7 @@ define([ | |||
if (itemId.itemId != null) | |||
itemId = itemId.itemId; | |||
var item = this.findItem(itemId); | |||
let item = this.findItem(itemId); | |||
if (!item) | |||
return; | |||
else if (!item.spell) { | |||
@@ -331,7 +330,7 @@ define([ | |||
return; | |||
} | |||
var spellbook = this.obj.spellbook; | |||
let spellbook = this.obj.spellbook; | |||
spellbook.removeSpellById(item.runeSlot); | |||
delete item.eq; | |||
delete item.runeSlot; | |||
@@ -341,36 +340,36 @@ define([ | |||
}, | |||
stashItem: function (id) { | |||
var item = this.findItem(id); | |||
let item = this.findItem(id); | |||
if ((!item) || (item.quest) || (item.noStash)) | |||
return; | |||
delete item.pos; | |||
var stash = this.obj.stash; | |||
let stash = this.obj.stash; | |||
if (!stash.active) | |||
return; | |||
var clonedItem = extend(true, {}, item); | |||
let clonedItem = extend(true, {}, item); | |||
this.destroyItem(id, null, true); | |||
stash.deposit(clonedItem); | |||
}, | |||
salvageItem: function (id) { | |||
var item = this.findItem(id); | |||
let item = this.findItem(id); | |||
if ((!item) || (item.material) || (item.quest) || (item.noSalvage) || (item.eq)) | |||
return; | |||
var messages = []; | |||
let messages = []; | |||
var items = salvager.salvage(item); | |||
var iLen = items.length; | |||
let items = salvager.salvage(item); | |||
let iLen = items.length; | |||
if (!iLen) | |||
return; | |||
for (var i = 0; i < iLen; i++) { | |||
var material = items[i]; | |||
for (let i = 0; i < iLen; i++) { | |||
let material = items[i]; | |||
this.getItem(material, true); | |||
@@ -389,7 +388,7 @@ define([ | |||
}, | |||
destroyItem: function (id, amount, force) { | |||
var item = this.findItem(id); | |||
let item = this.findItem(id); | |||
if ((!item) || ((item.noDestroy) && (!force))) | |||
return; | |||
@@ -416,16 +415,16 @@ define([ | |||
}, | |||
dropItem: function (id) { | |||
var item = this.findItem(id); | |||
let item = this.findItem(id); | |||
if ((!item) || (item.noDrop) || (item.quest)) | |||
return; | |||
delete item.pos; | |||
//Find close open position | |||
var x = this.obj.x; | |||
var y = this.obj.y; | |||
var dropCell = this.obj.instance.physics.getOpenCellInArea(x - 1, y - 1, x + 1, y + 1); | |||
let x = this.obj.x; | |||
let y = this.obj.y; | |||
let dropCell = this.obj.instance.physics.getOpenCellInArea(x - 1, y - 1, x + 1, y + 1); | |||
if (!dropCell) | |||
return; | |||
@@ -441,7 +440,7 @@ define([ | |||
moveItem: function (msgs) { | |||
msgs.forEach(function (m) { | |||
var item = this.findItem(m.id); | |||
let item = this.findItem(m.id); | |||
if (!item) | |||
return; | |||
@@ -450,7 +449,7 @@ define([ | |||
}, | |||
mailItem: function (msg) { | |||
var item = this.findItem(msg.itemId); | |||
let item = this.findItem(msg.itemId); | |||
if ((!item) || (item.noDrop) || (item.quest)) { | |||
this.resolveCallback(msg); | |||
return; | |||
@@ -458,7 +457,7 @@ define([ | |||
delete item.pos; | |||
var io = require('security/io'); | |||
let io = require('security/io'); | |||
io.get({ | |||
ent: msg.recipient, | |||
field: 'character', | |||
@@ -483,24 +482,24 @@ define([ | |||
hookItemEvents: function (items) { | |||
var items = items || this.items; | |||
var iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
let iLen = items.length; | |||
for (let 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); | |||
let mtxUrl = mtx.get(e.mtx); | |||
let mtxModule = require(mtxUrl); | |||
e.events = mtxModule.events; | |||
} else if (e.factionId) { | |||
var faction = factions.getFaction(e.factionId); | |||
var statGenerator = faction.uniqueStat; | |||
let faction = factions.getFaction(e.factionId); | |||
let statGenerator = faction.uniqueStat; | |||
statGenerator.generate(item); | |||
} else { | |||
var effectUrl = itemEffects.get(e.type); | |||
var effectModule = require(effectUrl); | |||
let effectUrl = itemEffects.get(e.type); | |||
let effectModule = require(effectUrl); | |||
e.events = effectModule.events; | |||
} | |||
@@ -530,11 +529,11 @@ define([ | |||
}, | |||
setItemPosition: function (id) { | |||
var item = this.findItem(id); | |||
let item = this.findItem(id); | |||
if (!item) | |||
return; | |||
var iSize = this.inventorySize; | |||
let iSize = this.inventorySize; | |||
for (var i = 0; i < iSize; i++) { | |||
if (!this.items.some(j => (j.pos == i))) { | |||
item.pos = i; | |||
@@ -544,7 +543,7 @@ define([ | |||
}, | |||
resolveCallback: function (msg, result) { | |||
var callbackId = (msg.callbackId != null) ? msg.callbackId : msg; | |||
let callbackId = (msg.callbackId != null) ? msg.callbackId : msg; | |||
result = result || []; | |||
if (callbackId == null) | |||
@@ -568,7 +567,7 @@ define([ | |||
}, | |||
getDefaultAbilities: function () { | |||
var hasWeapon = this.items.some(function (i) { | |||
let hasWeapon = this.items.some(function (i) { | |||
return ( | |||
(i.spell) && | |||
(i.spell.rolls) && | |||
@@ -578,7 +577,7 @@ define([ | |||
}); | |||
if (!hasWeapon) { | |||
var item = generator.generate({ | |||
let item = generator.generate({ | |||
type: classes.weapons[this.obj.class], | |||
quality: 0, | |||
spellQuality: 'basic' | |||
@@ -589,7 +588,7 @@ define([ | |||
} | |||
classes.spells[this.obj.class].forEach(function (spellName) { | |||
var hasSpell = this.items.some(function (i) { | |||
let hasSpell = this.items.some(function (i) { | |||
return ( | |||
(i.spell) && | |||
(i.spell.name.toLowerCase() == spellName) | |||
@@ -597,7 +596,7 @@ define([ | |||
}); | |||
if (!hasSpell) { | |||
var item = generator.generate({ | |||
let item = generator.generate({ | |||
spell: true, | |||
spellQuality: 'basic', | |||
spellName: spellName | |||
@@ -613,12 +612,12 @@ define([ | |||
if (ownerId == null) | |||
ownerId = -1; | |||
var bagCell = 50; | |||
let bagCell = 50; | |||
var topQuality = 0; | |||
var iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var quality = items[i].quality; | |||
let topQuality = 0; | |||
let iLen = items.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let quality = items[i].quality; | |||
items[i].fromMob = !!this.obj.mob; | |||
if (quality > topQuality) | |||
topQuality = quality; | |||
@@ -635,7 +634,7 @@ define([ | |||
else | |||
bagCell = 53; | |||
var obj = this.obj.instance.objects.buildObjects([{ | |||
let obj = this.obj.instance.objects.buildObjects([{ | |||
sheetName: 'objects', | |||
cell: bagCell, | |||
x: x, | |||
@@ -656,17 +655,16 @@ define([ | |||
hasSpace: function () { | |||
if (this.inventorySize != -1) { | |||
var nonEqItems = this.items.filter(f => !f.eq).length; | |||
let nonEqItems = this.items.filter(f => !f.eq).length; | |||
return (nonEqItems < this.inventorySize); | |||
} else | |||
return true; | |||
} return true; | |||
}, | |||
getItem: function (item, hideMessage, noStack) { | |||
this.obj.instance.eventEmitter.emit('onBeforeGetItem', item, this.obj); | |||
//We need to know if a mob dropped it for quest purposes | |||
var fromMob = item.fromMob; | |||
let fromMob = item.fromMob; | |||
if (item.quality == null) | |||
item.quality = 0; | |||
@@ -676,11 +674,11 @@ define([ | |||
delete item.fromMob; | |||
//Store the quantity to send to the player | |||
var quantity = item.quantity; | |||
let quantity = item.quantity; | |||
var exists = false; | |||
let exists = false; | |||
if (((item.material) || (item.quest) || (item.quantity)) && (!item.noStack) && (!item.uses) && (!noStack)) { | |||
var existItem = this.items.find(i => (i.name == item.name)); | |||
let existItem = this.items.find(i => (i.name == item.name)); | |||
if (existItem) { | |||
exists = true; | |||
if (!existItem.quantity) | |||
@@ -696,9 +694,9 @@ define([ | |||
//Get next id | |||
if (!exists) { | |||
var id = 0; | |||
var items = this.items; | |||
var iLen = items.length; | |||
let id = 0; | |||
let items = this.items; | |||
let iLen = items.length; | |||
if (!this.hasSpace()) { | |||
if (!hideMessage) { | |||
@@ -716,10 +714,9 @@ define([ | |||
} | |||
for (var i = 0; i < iLen; i++) { | |||
var fItem = items[i]; | |||
if (fItem.id >= id) { | |||
let fItem = items[i]; | |||
if (fItem.id >= id) | |||
id = fItem.id + 1; | |||
} | |||
} | |||
item.id = id; | |||
@@ -727,7 +724,7 @@ define([ | |||
delete item.pos; | |||
if ((item.pos == null) && (!item.eq)) { | |||
var pos = iLen; | |||
let pos = iLen; | |||
for (var i = 0; i < iLen; i++) { | |||
if (!items.some(fi => (fi.pos == i))) { | |||
pos = i; | |||
@@ -739,9 +736,9 @@ define([ | |||
} | |||
if ((this.obj.player) && (!hideMessage)) { | |||
var messages = []; | |||
let messages = []; | |||
var msg = item.name; | |||
let msg = item.name; | |||
if (quantity) | |||
msg += ' x' + quantity; | |||
else if ((item.stats) && (item.stats.weight)) | |||
@@ -767,11 +764,11 @@ define([ | |||
//TODO: Remove later, just for test | |||
if (item.stats) { | |||
var stats = Object.keys(item.stats); | |||
var sLen = stats.length | |||
let stats = Object.keys(item.stats); | |||
let sLen = stats.length; | |||
for (var i = 0; i < sLen; i++) { | |||
var s = stats[i]; | |||
var val = item.stats[s]; | |||
let s = stats[i]; | |||
let val = item.stats[s]; | |||
if (s == 'maxHp') { | |||
delete item.stats[s]; | |||
item.stats.hpMax = val; | |||
@@ -785,13 +782,13 @@ define([ | |||
if (item.effects) { | |||
item.effects.forEach(function (e) { | |||
if (e.mtx) { | |||
var mtxUrl = mtx.get(e.mtx); | |||
var mtxModule = require(mtxUrl); | |||
let mtxUrl = mtx.get(e.mtx); | |||
let mtxModule = require(mtxUrl); | |||
e.events = mtxModule.events; | |||
} else if (e.type) { | |||
var effectUrl = itemEffects.get(e.type); | |||
var effectModule = require(effectUrl); | |||
let effectUrl = itemEffects.get(e.type); | |||
let effectModule = require(effectUrl); | |||
e.text = effectModule.events.onGetText(item); | |||
@@ -808,40 +805,38 @@ define([ | |||
this.learnAbility(item.id, item.runeSlot); | |||
else | |||
this.obj.equipment.equip(item.id); | |||
} else { | |||
if (!item.effects) | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item, true); | |||
else { | |||
var result = extend(true, {}, item); | |||
result.effects = result.effects.map(e => ({ | |||
factionId: e.factionId, | |||
text: e.text, | |||
properties: e.properties | |||
})); | |||
var reputation = this.obj.reputation; | |||
//Don't do this check if we don't have a reputation cpn. That means this is most likely a bag | |||
if ((reputation) && (result.factions)) { | |||
result.factions = result.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; | |||
return { | |||
name: faction.name, | |||
tier: f.tier, | |||
tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier], | |||
noEquip: noEquip | |||
}; | |||
}, this); | |||
} | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', result, true); | |||
} else if (!item.effects) | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', item, true); | |||
else { | |||
let result = extend(true, {}, item); | |||
result.effects = result.effects.map(e => ({ | |||
factionId: e.factionId, | |||
text: e.text, | |||
properties: e.properties | |||
})); | |||
let reputation = this.obj.reputation; | |||
//Don't do this check if we don't have a reputation cpn. That means this is most likely a bag | |||
if ((reputation) && (result.factions)) { | |||
result.factions = result.factions.map(function (f) { | |||
let faction = reputation.getBlueprint(f.id); | |||
let factionTier = reputation.getTier(f.id); | |||
let noEquip = null; | |||
if (factionTier < f.tier) | |||
noEquip = true; | |||
return { | |||
name: faction.name, | |||
tier: f.tier, | |||
tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier], | |||
noEquip: noEquip | |||
}; | |||
}, this); | |||
} | |||
this.obj.syncer.setArray(true, 'inventory', 'getItems', result, true); | |||
} | |||
if (!hideMessage) { | |||
@@ -857,14 +852,14 @@ define([ | |||
return; | |||
//Only drop loot if this player is in the zone | |||
var playerObject = this.obj.instance.objects.find(o => o.serverId == ownerId); | |||
let playerObject = this.obj.instance.objects.find(o => o.serverId == ownerId); | |||
if (!playerObject) | |||
return; | |||
//Get player's spells' statTypes | |||
var stats = []; | |||
let stats = []; | |||
playerObject.spellbook.spells.forEach(function (s) { | |||
var spellStatType = s.statType; | |||
let spellStatType = s.statType; | |||
if (!(spellStatType instanceof Array)) | |||
spellStatType = [spellStatType]; | |||
spellStatType.forEach(function (ss) { | |||
@@ -873,20 +868,20 @@ define([ | |||
}); | |||
}); | |||
var items = this.items; | |||
var iLen = items.length; | |||
let items = this.items; | |||
let iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
delete items[i].eq; | |||
delete items[i].pos; | |||
} | |||
var blueprint = this.blueprint; | |||
let blueprint = this.blueprint; | |||
var savedItems = extend(true, [], this.items); | |||
var instancedItems = extend(true, [], this.items); | |||
let savedItems = extend(true, [], this.items); | |||
let instancedItems = extend(true, [], this.items); | |||
this.items = []; | |||
var dropEvent = { | |||
let dropEvent = { | |||
chanceMultiplier: 1, | |||
source: this.obj | |||
}; | |||
@@ -894,10 +889,10 @@ define([ | |||
if ((!blueprint.noRandom) || (blueprint.alsoRandom)) { | |||
var magicFind = (blueprint.magicFind || 0); | |||
var bonusMagicFind = killSource.stats.values.magicFind; | |||
let bonusMagicFind = killSource.stats.values.magicFind; | |||
var rolls = blueprint.rolls; | |||
var itemQuantity = killSource.stats.values.itemQuantity; | |||
let rolls = blueprint.rolls; | |||
let itemQuantity = killSource.stats.values.itemQuantity; | |||
rolls += ~~(itemQuantity / 100); | |||
if ((Math.random() * 100) < (itemQuantity % 100)) | |||
rolls++; | |||
@@ -906,35 +901,34 @@ define([ | |||
if (Math.random() * 100 >= (blueprint.chance || 35) * dropEvent.chanceMultiplier) | |||
continue; | |||
var itemBlueprint = { | |||
let itemBlueprint = { | |||
level: this.obj.stats.values.level, | |||
magicFind: magicFind, | |||
bonusMagicFind: bonusMagicFind | |||
}; | |||
var statValues = this.obj.stats.values; | |||
useItem = generator.generate(itemBlueprint, statValues.originalLevel || statValues.level); | |||
let statValues = this.obj.stats.values; | |||
useItem = generator.generate(itemBlueprint, statValues.level); | |||
this.getItem(useItem); | |||
} | |||
} | |||
if (blueprint.noRandom) { | |||
var blueprints = blueprint.blueprints; | |||
let blueprints = blueprint.blueprints; | |||
for (var i = 0; i < blueprints.length; i++) { | |||
var drop = blueprints[i]; | |||
let drop = blueprints[i]; | |||
if ((blueprint.chance) && (~~(Math.random() * 100) >= blueprint.chance * dropEvent.chanceMultiplier)) | |||
continue; | |||
else if ((drop.maxLevel) && (drop.maxLevel < killSource.stats.values.level)) | |||
continue; | |||
else if ((drop.chance) && (~~(Math.random() * 100) >= drop.chance * dropEvent.chanceMultiplier)) { | |||
else if ((drop.chance) && (~~(Math.random() * 100) >= drop.chance * dropEvent.chanceMultiplier)) | |||
continue; | |||
} | |||
drop.level = drop.level || this.obj.stats.values.level; | |||
drop.magicFind = magicFind; | |||
var item = drop; | |||
let item = drop; | |||
if ((!item.quest) && (item.type != 'key')) | |||
item = generator.generate(drop); | |||
@@ -955,14 +949,14 @@ define([ | |||
}, | |||
giveItems: function (obj, hideMessage) { | |||
var objInventory = obj.inventory; | |||
let objInventory = obj.inventory; | |||
var messages = []; | |||
let messages = []; | |||
var items = this.items; | |||
var iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var item = items[i]; | |||
let items = this.items; | |||
let iLen = items.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let item = items[i]; | |||
if (objInventory.getItem(item, hideMessage)) { | |||
items.splice(i, 1); | |||
@@ -976,10 +970,10 @@ define([ | |||
}, | |||
rollItems: function (party) { | |||
var items = this.items; | |||
var iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var item = items[i]; | |||
let items = this.items; | |||
let iLen = items.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let item = items[i]; | |||
this.obj.instance.syncer.queue('serverModule', { | |||
module: 'lootRoller', | |||
@@ -995,23 +989,23 @@ define([ | |||
}, | |||
fireEvent: function (event, args) { | |||
var items = this.items; | |||
var iLen = items.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var item = items[i]; | |||
let items = this.items; | |||
let iLen = items.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let item = items[i]; | |||
if ((!item.eq) && (!item.active)) | |||
continue; | |||
var effects = item.effects; | |||
let effects = item.effects; | |||
if (!effects) | |||
continue; | |||
var eLen = effects.length; | |||
for (var j = 0; j < eLen; j++) { | |||
var effect = effects[j]; | |||
let eLen = effects.length; | |||
for (let j = 0; j < eLen; j++) { | |||
let effect = effects[j]; | |||
var effectEvent = effect.events[event]; | |||
let effectEvent = effect.events[event]; | |||
if (!effectEvent) | |||
continue; | |||
@@ -1026,25 +1020,23 @@ define([ | |||
}, | |||
equipItemErrors: function (item) { | |||
var errors = []; | |||
let errors = []; | |||
if (!this.obj.player) | |||
return []; | |||
var stats = this.obj.stats.values; | |||
var originalValues = this.obj.stats.originalValues || this.obj.stats.values; | |||
let stats = this.obj.stats.values; | |||
var playerLevel = (stats.originalLevel || stats.level); | |||
if (item.level > playerLevel) | |||
if (item.level > stats.level) | |||
errors.push('level'); | |||
if ((item.requires) && (originalValues[item.requires[0].stat] < item.requires[0].value)) | |||
if ((item.requires) && (stats[item.requires[0].stat] < item.requires[0].value)) | |||
errors.push(item.requires[0].stat); | |||
if (item.factions) { | |||
if (item.factions.some(function (f) { | |||
return f.noEquip; | |||
})) | |||
return f.noEquip; | |||
})) | |||
errors.push('faction'); | |||
} | |||
@@ -7,7 +7,7 @@ define([ | |||
classes, | |||
scheduler | |||
) { | |||
var baseStats = { | |||
let baseStats = { | |||
mana: 20, | |||
manaMax: 20, | |||
@@ -86,7 +86,6 @@ define([ | |||
type: 'stats', | |||
values: baseStats, | |||
originalValues: null, | |||
statScales: { | |||
vitToHp: 10, | |||
@@ -111,15 +110,13 @@ define([ | |||
init: function (blueprint, isTransfer) { | |||
this.syncer = this.obj.instance.syncer; | |||
var values = (blueprint || {}).values || {}; | |||
for (var v in values) { | |||
let values = (blueprint || {}).values || {}; | |||
for (var v in values) | |||
this.values[v] = values[v]; | |||
} | |||
var stats = (blueprint || {}).stats || {}; | |||
for (var v in stats) { | |||
let stats = (blueprint || {}).stats || {}; | |||
for (var v in stats) | |||
this.stats[v] = stats[v]; | |||
} | |||
this.calcXpMax(); | |||
@@ -128,7 +125,7 @@ define([ | |||
}, | |||
resetHp: function () { | |||
var values = this.values; | |||
let values = this.values; | |||
values.hp = values.hpMax; | |||
this.obj.syncer.setObject(false, 'stats', 'values', 'hp', values.hp); | |||
@@ -138,27 +135,27 @@ define([ | |||
if (((this.obj.mob) && (!this.obj.follower)) || (this.obj.dead)) | |||
return; | |||
var values = this.values; | |||
let values = this.values; | |||
var manaMax = values.manaMax; | |||
let manaMax = values.manaMax; | |||
manaMax -= (manaMax * values.manaReservePercent); | |||
var regen = { | |||
let regen = { | |||
success: true | |||
}; | |||
this.obj.fireEvent('beforeRegen', regen); | |||
if (!regen.success) | |||
return; | |||
var isInCombat = (this.obj.aggro.list.length > 0); | |||
let isInCombat = (this.obj.aggro.list.length > 0); | |||
if (this.obj.follower) { | |||
isInCombat = (this.obj.follower.master.aggro.list.length > 0); | |||
if (isInCombat) | |||
return; | |||
} | |||
var regenHp = 0; | |||
var regenMana = 0; | |||
let regenHp = 0; | |||
let regenMana = 0; | |||
regenMana = values.regenMana / 50; | |||
@@ -195,12 +192,12 @@ define([ | |||
}, | |||
addStat: function (stat, value) { | |||
var values = this.values; | |||
let values = this.values; | |||
if (['lvlRequire', 'allAttributes'].indexOf(stat) == -1) | |||
values[stat] += value; | |||
var sendOnlyToSelf = (['hp', 'hpMax', 'mana', 'manaMax', 'vit'].indexOf(stat) == -1); | |||
let sendOnlyToSelf = (['hp', 'hpMax', 'mana', 'manaMax', 'vit'].indexOf(stat) == -1); | |||
this.obj.syncer.setObject(sendOnlyToSelf, 'stats', 'values', stat, values[stat]); | |||
if (sendOnlyToSelf) | |||
@@ -214,20 +211,20 @@ define([ | |||
var morphStat = stat.substr(3); | |||
morphStat = morphStat[0].toLowerCase() + morphStat.substr(1); | |||
this.addStat(morphStat, value); | |||
} else if (stat == 'vit') { | |||
} else if (stat == 'vit') | |||
this.addStat('hpMax', (value * this.statScales.vitToHp)); | |||
} else if (stat == 'allAttributes') { | |||
else if (stat == 'allAttributes') { | |||
['int', 'str', 'dex'].forEach(function (s) { | |||
this.addStat(s, value) | |||
this.addStat(s, value); | |||
}, this); | |||
} else if (stat == 'elementAllResist') { | |||
['arcane', 'frost', 'fire', 'holy', 'poison'].forEach(function (s) { | |||
var element = 'element' + (s[0].toUpperCase() + s.substr(1)) + 'Resist'; | |||
let element = 'element' + (s[0].toUpperCase() + s.substr(1)) + 'Resist'; | |||
this.addStat(element, value); | |||
}, this); | |||
} else if (stat == 'elementPercent') { | |||
['arcane', 'frost', 'fire', 'holy', 'poison'].forEach(function (s) { | |||
var element = 'element' + (s[0].toUpperCase() + s.substr(1)) + 'Percent'; | |||
let element = 'element' + (s[0].toUpperCase() + s.substr(1)) + 'Percent'; | |||
this.addStat(element, value); | |||
}, this); | |||
} else if (stat == 'str') | |||
@@ -241,7 +238,7 @@ define([ | |||
}, | |||
calcXpMax: function () { | |||
var level = (this.originalValues || this.values).level; | |||
let level = this.values.level; | |||
this.values.xpMax = (level * 5) + ~~(level * 10 * Math.pow(level, 2.2)); | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'xpMax', this.values.xpMax); | |||
@@ -250,13 +247,13 @@ define([ | |||
//Source is the object that caused you to gain xp (mostly yourself) | |||
//Target is the source of the xp (a mob or quest) | |||
getXp: function (amount, source, target) { | |||
var obj = this.obj; | |||
var values = this.values; | |||
let obj = this.obj; | |||
let values = this.values; | |||
if ((this.originalValues || this.values).level == 20) | |||
if (values.level == 20) | |||
return; | |||
var xpEvent = { | |||
let xpEvent = { | |||
source: source, | |||
target: target, | |||
amount: amount | |||
@@ -279,32 +276,26 @@ define([ | |||
text: '+' + amount + ' xp' | |||
}); | |||
var syncO = {}; | |||
var didLevelUp = false; | |||
let syncO = {}; | |||
let didLevelUp = false; | |||
while (values.xp >= values.xpMax) { | |||
didLevelUp = true; | |||
values.xp -= values.xpMax; | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'xp', values.xp); | |||
if (this.originalValues) { | |||
this.originalValues.level++; | |||
} | |||
if (values.originalLevel) | |||
values.originalLevel++; | |||
values.level++; | |||
this.obj.fireEvent('onLevelUp', (this.originalValues || this.values).level); | |||
this.obj.fireEvent('onLevelUp', this.values.level); | |||
if ((this.originalValues || this.values).level == 20) | |||
if (values.level == 20) | |||
values.xp = 0; | |||
values.hpMax = values.level * 32.7; | |||
var gainStats = classes.stats[this.obj.class].gainStats; | |||
for (var s in gainStats) { | |||
let gainStats = classes.stats[this.obj.class].gainStats; | |||
for (let s in gainStats) | |||
this.addStat(s, gainStats[s]); | |||
} | |||
this.obj.spellbook.calcDps(); | |||
@@ -314,13 +305,13 @@ define([ | |||
text: 'level up' | |||
}); | |||
syncO.level = (this.originalValues || this.values).level; | |||
syncO.level = values.level; | |||
this.calcXpMax(); | |||
} | |||
if (didLevelUp) { | |||
var cellContents = obj.instance.physics.getCell(obj.x, obj.y); | |||
let cellContents = obj.instance.physics.getCell(obj.x, obj.y); | |||
cellContents.forEach(function (c) { | |||
c.fireEvent('onCellPlayerLevelUp', obj); | |||
}); | |||
@@ -335,24 +326,10 @@ define([ | |||
}); | |||
if (didLevelUp) { | |||
var maxLevel = this.obj.instance.zone.level[1] | |||
if (maxLevel < (this.originalValues || values).level) { | |||
this.rescale(maxLevel, false); | |||
} else { | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'hpMax', values.hpMax); | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'level', this.values.level); | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'originalLevel', this.values.originalLevel); | |||
this.obj.syncer.setObject(false, 'stats', 'values', 'hpMax', values.hpMax); | |||
this.obj.syncer.setObject(false, 'stats', 'values', 'level', this.values.level); | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'originalLevel', this.values.originalLevel); | |||
} | |||
} | |||
var originalValues = this.originalValues; | |||
if (originalValues) { | |||
originalValues.xp = values.xp; | |||
originalValues.xpMax = values.xpMax; | |||
originalValues.xpTotal = values.xpTotal; | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'hpMax', values.hpMax); | |||
this.obj.syncer.setObject(true, 'stats', 'values', 'level', values.level); | |||
this.obj.syncer.setObject(false, 'stats', 'values', 'hpMax', values.hpMax); | |||
this.obj.syncer.setObject(false, 'stats', 'values', 'level', values.level); | |||
} | |||
}, | |||
@@ -360,29 +337,29 @@ define([ | |||
if (target.player) | |||
return; | |||
var level = target.stats.values.level; | |||
var mobDiffMult = 1; | |||
let level = target.stats.values.level; | |||
let mobDiffMult = 1; | |||
if (target.isRare) | |||
mobDiffMult = 2; | |||
else if (target.isChampion) | |||
mobDiffMult = 5; | |||
//Who should get xp? | |||
var aggroList = target.aggro.list; | |||
var hpMax = target.stats.values.hpMax; | |||
var aLen = aggroList.length; | |||
for (var i = 0; i < aLen; i++) { | |||
let aggroList = target.aggro.list; | |||
let hpMax = target.stats.values.hpMax; | |||
let aLen = aggroList.length; | |||
for (let i = 0; i < aLen; i++) { | |||
var a = aggroList[i]; | |||
var dmg = a.damage; | |||
let dmg = a.damage; | |||
if (dmg <= 0) | |||
continue; | |||
var mult = 1; | |||
let mult = 1; | |||
//How many party members contributed | |||
// Remember, maybe one of the aggro-ees might be a mob too | |||
var party = a.obj.social ? a.obj.social.party : null; | |||
if (party) { | |||
var partySize = aggroList.filter(function (f) { | |||
let partySize = aggroList.filter(function (f) { | |||
return ((a.damage > 0) && (party.indexOf(f.obj.serverId) > -1)); | |||
}).length; | |||
partySize--; | |||
@@ -393,10 +370,10 @@ define([ | |||
//Scale xp by source level so you can't just farm low level mobs (or get boosted on high level mobs). | |||
//Mobs that are farther then 10 levels from you, give no xp | |||
//We don't currently do this for quests/herb gathering | |||
var sourceLevel = a.obj.stats.values.level; | |||
var levelDelta = level - sourceLevel; | |||
let sourceLevel = a.obj.stats.values.level; | |||
let levelDelta = level - sourceLevel; | |||
var amount = null; | |||
let amount = null; | |||
if (Math.abs(levelDelta) <= 10) | |||
amount = ~~(((sourceLevel + levelDelta) * 10) * Math.pow(1 - (Math.abs(levelDelta) / 10), 2) * mult * mobDiffMult); | |||
else | |||
@@ -411,7 +388,7 @@ define([ | |||
die: function (source) { | |||
var obj = this.obj; | |||
var values = this.values; | |||
let values = this.values; | |||
this.syncer.queue('onGetDamage', { | |||
id: obj.id, | |||
@@ -422,14 +399,14 @@ define([ | |||
obj.syncer.set(true, null, 'dead', true); | |||
var obj = obj; | |||
var syncO = obj.syncer.o; | |||
let syncO = obj.syncer.o; | |||
obj.hidden = true; | |||
obj.nonSelectable = true; | |||
syncO.hidden = true; | |||
syncO.nonSelectable = true; | |||
var xpLoss = ~~Math.min(values.xp, values.xpMax / 10); | |||
let xpLoss = ~~Math.min(values.xp, values.xpMax / 10); | |||
values.xp -= xpLoss; | |||
obj.syncer.setObject(true, 'stats', 'values', 'xp', values.xp); | |||
@@ -453,11 +430,11 @@ define([ | |||
respawn: function () { | |||
this.obj.syncer.set(true, null, 'dead', false); | |||
var obj = this.obj; | |||
var syncO = obj.syncer.o; | |||
let obj = this.obj; | |||
let syncO = obj.syncer.o; | |||
this.obj.dead = false; | |||
var values = this.values; | |||
let values = this.values; | |||
values.hp = values.hpMax; | |||
values.mana = values.manaMax; | |||
@@ -503,7 +480,7 @@ define([ | |||
if (this.obj.destroyed) | |||
return; | |||
var amount = damage.amount; | |||
let amount = damage.amount; | |||
if (amount > this.values.hp) | |||
amount = this.values.hp; | |||
@@ -511,7 +488,7 @@ define([ | |||
damage.dealt = amount; | |||
this.values.hp -= amount; | |||
var recipients = []; | |||
let recipients = []; | |||
if (this.obj.serverId != null) | |||
recipients.push(this.obj.serverId); | |||
if (source.serverId != null) | |||
@@ -541,18 +518,18 @@ define([ | |||
this.obj.aggro.tryEngage(source, amount, threatMult); | |||
var died = (this.values.hp <= 0); | |||
let died = (this.values.hp <= 0); | |||
if (died) { | |||
var death = { | |||
let death = { | |||
success: true | |||
}; | |||
this.obj.fireEvent('beforeDeath', death); | |||
if (death.success) { | |||
var deathEvent = {}; | |||
let deathEvent = {}; | |||
var killSource = source; | |||
let killSource = source; | |||
if (source.follower) | |||
killSource = source.follower.master; | |||
@@ -587,7 +564,7 @@ define([ | |||
this.obj.spellbook.die(); | |||
this.obj.destroyed = true; | |||
var deathAnimation = _.getDeepProperty(animations, ['mobs', this.obj.sheetName, this.obj.cell, 'death']); | |||
let deathAnimation = _.getDeepProperty(animations, ['mobs', this.obj.sheetName, this.obj.cell, 'death']); | |||
if (deathAnimation) { | |||
this.obj.instance.syncer.queue('onGetObject', { | |||
x: this.obj.x, | |||
@@ -597,10 +574,10 @@ define([ | |||
} | |||
if (this.obj.inventory) { | |||
var aggroList = this.obj.aggro.list; | |||
var aLen = aggroList.length; | |||
for (var i = 0; i < aLen; i++) { | |||
var a = aggroList[i]; | |||
let aggroList = this.obj.aggro.list; | |||
let aLen = aggroList.length; | |||
for (let i = 0; i < aLen; i++) { | |||
let a = aggroList[i]; | |||
if ((!a.threat) || (a.obj.serverId == null)) | |||
continue; | |||
@@ -620,16 +597,16 @@ define([ | |||
}, | |||
getHp: function (heal, source) { | |||
var amount = heal.amount; | |||
let amount = heal.amount; | |||
if (amount == 0) | |||
return; | |||
var threatMult = heal.threatMult; | |||
let threatMult = heal.threatMult; | |||
if (!heal.hasOwnProperty('threatMult')) | |||
threatMult = 1; | |||
var values = this.values; | |||
var hpMax = values.hpMax; | |||
let values = this.values; | |||
let hpMax = values.hpMax; | |||
if (values.hp >= hpMax) | |||
return; | |||
@@ -641,7 +618,7 @@ define([ | |||
if (values.hp > hpMax) | |||
values.hp = hpMax; | |||
var recipients = []; | |||
let recipients = []; | |||
if (this.obj.serverId != null) | |||
recipients.push(this.obj.serverId); | |||
if (source.serverId != null) | |||
@@ -657,11 +634,11 @@ define([ | |||
} | |||
//Add aggro to all our attackers | |||
var threat = amount * 0.4 * threatMult; | |||
var aggroList = this.obj.aggro.list; | |||
var aLen = aggroList.length; | |||
for (var i = 0; i < aLen; i++) { | |||
var a = aggroList[i].obj; | |||
let threat = amount * 0.4 * threatMult; | |||
let aggroList = this.obj.aggro.list; | |||
let aLen = aggroList.length; | |||
for (let i = 0; i < aLen; i++) { | |||
let a = aggroList[i].obj; | |||
a.aggro.tryEngage(source, threat); | |||
} | |||
@@ -674,7 +651,7 @@ define([ | |||
delete this.sessionDuration; | |||
} | |||
var values = extend(true, {}, this.originalValues || this.values); | |||
let values = extend(true, {}, this.values); | |||
values.hp = this.values.hp; | |||
values.mana = this.values.mana; | |||
@@ -686,10 +663,10 @@ define([ | |||
}, | |||
simplify: function (self) { | |||
var values = this.values; | |||
let values = this.values; | |||
if (!self) { | |||
var result = { | |||
let result = { | |||
type: 'stats', | |||
values: { | |||
hp: values.hp, | |||
@@ -700,127 +677,48 @@ define([ | |||
} | |||
}; | |||
return result | |||
return result; | |||
} | |||
return { | |||
type: 'stats', | |||
values: values, | |||
originalValues: this.originalValues, | |||
stats: this.stats, | |||
vitScale: this.vitScale | |||
}; | |||
}, | |||
onLogin: function () { | |||
var stats = this.stats; | |||
var time = scheduler.getTime(); | |||
let stats = this.stats; | |||
let time = scheduler.getTime(); | |||
stats.lastLogin = time; | |||
this.obj.instance.mail.getMail(this.obj.name); | |||
}, | |||
rescale: function (level, isMob) { | |||
if (level > this.values.level) | |||
level = this.values.level; | |||
var sync = this.obj.syncer.setObject.bind(this.obj.syncer); | |||
var oldHp = this.values.hp; | |||
var oldXp = this.values.xp; | |||
var oldXpTotal = this.values.xpTotal; | |||
var oldXpMax = this.values.xpMax; | |||
if (!this.originalValues) | |||
this.originalValues = extend(true, {}, this.values); | |||
var oldValues = this.values; | |||
var newValues = extend(true, {}, baseStats); | |||
newValues.level = level; | |||
newValues.originalLevel = (this.originalValues || oldValues).level; | |||
this.values = newValues; | |||
var gainStats = classes.stats[this.obj.class].gainStats; | |||
for (var s in gainStats) { | |||
this.addStat(s, (gainStats[s] * level)); | |||
} | |||
newValues.hpMax = level * 32.7; | |||
if (isMob) | |||
newValues.hpMax = ~~(newValues.hpMax * (level / 10)); | |||
newValues.hp = oldHp; | |||
var resetHp = false; | |||
if (newValues.hp > newValues.hpMax) { | |||
resetHp = true; | |||
newValues.hp = newValues.hpMax; | |||
} | |||
newValues.xp = oldXp; | |||
newValues.xpMax = oldXpMax; | |||
newValues.xpTotal = oldXpTotal; | |||
var addStats = this.obj.equipment.rescale(level); | |||
for (var p in addStats) { | |||
var statName = p; | |||
this.addStat(statName, addStats[p]); | |||
} | |||
this.obj.passives.applyPassives(); | |||
if (resetHp) | |||
newValues.hp = newValues.hpMax; | |||
this.obj.spellbook.calcDps(); | |||
var publicStats = [ | |||
'hp', | |||
'hpMax', | |||
'mana', | |||
'manaMax', | |||
'level' | |||
]; | |||
for (var p in newValues) { | |||
sync(true, 'stats', 'values', p, newValues[p]); | |||
if (publicStats.indexOf(p) > -1) | |||
sync(false, 'stats', 'values', p, newValues[p]); | |||
} | |||
}, | |||
getKillStreakCoefficient: function (mobName) { | |||
var killStreak = this.stats.mobKillStreaks[mobName]; | |||
let killStreak = this.stats.mobKillStreaks[mobName]; | |||
if (!killStreak) | |||
return 1; | |||
else | |||
return Math.max(0, (10000 - Math.pow(killStreak, 2)) / 10000); | |||
return Math.max(0, (10000 - Math.pow(killStreak, 2)) / 10000); | |||
}, | |||
canGetMobLoot: function (mob) { | |||
if (!mob.inventory.dailyDrops) | |||
return true; | |||
var lootStats = this.stats.lootStats[mob.name]; | |||
var time = scheduler.getTime(); | |||
if (!lootStats) { | |||
let lootStats = this.stats.lootStats[mob.name]; | |||
let time = scheduler.getTime(); | |||
if (!lootStats) | |||
this.stats.lootStats[mob.name] = time; | |||
} else | |||
else | |||
return ((lootStats.day != time.day), (lootStats.month != time.month)); | |||
}, | |||
events: { | |||
transferComplete: function () { | |||
var maxLevel = this.obj.instance.zone.level[1]; | |||
if (maxLevel > this.obj.stats.values.level) | |||
maxLevel = this.obj.stats.values.level; | |||
this.obj.stats.rescale(maxLevel); | |||
}, | |||
afterKillMob: function (mob) { | |||
var mobKillStreaks = this.stats.mobKillStreaks; | |||
var mobName = mob.name; | |||
let mobKillStreaks = this.stats.mobKillStreaks; | |||
let mobName = mob.name; | |||
if (!mobKillStreaks[mobName]) | |||
mobKillStreaks.mobName = 0; | |||
@@ -828,7 +726,7 @@ define([ | |||
if (mobKillStreaks[mobName] < 100) | |||
mobKillStreaks[mobName]++; | |||
for (var p in mobKillStreaks) { | |||
for (let p in mobKillStreaks) { | |||
if (p == mobName) | |||
continue; | |||
@@ -856,9 +754,9 @@ define([ | |||
}, | |||
afterMove: function (event) { | |||
var mobKillStreaks = this.stats.mobKillStreaks; | |||
let mobKillStreaks = this.stats.mobKillStreaks; | |||
for (var p in mobKillStreaks) { | |||
for (let p in mobKillStreaks) { | |||
mobKillStreaks[p] -= 0.085; | |||
if (mobKillStreaks[p] <= 0) | |||
delete mobKillStreaks[p]; | |||
@@ -19,13 +19,9 @@ define([ | |||
if (['oneHanded', 'twoHanded'].indexOf(item.slot) == -1) | |||
return; | |||
var stats = item.stats; | |||
var maxLevel = this.obj.instance.zone.level[1]; | |||
if (maxLevel < item.level) | |||
stats = generatorStats.rescale(item, maxLevel); | |||
for (var s in stats) { | |||
var val = stats[s]; | |||
let stats = item.stats; | |||
for (let s in stats) { | |||
let val = stats[s]; | |||
this.obj.stats.addStat(s, val); | |||
} | |||
@@ -34,26 +30,12 @@ define([ | |||
if (['oneHanded', 'twoHanded'].indexOf(item.slot) == -1) | |||
return; | |||
var stats = item.stats; | |||
var maxLevel = this.obj.instance.zone.level[1]; | |||
if (maxLevel < item.level) | |||
stats = generatorStats.rescale(item, maxLevel); | |||
for (var s in stats) { | |||
var val = stats[s]; | |||
let stats = item.stats; | |||
for (let s in stats) { | |||
let val = stats[s]; | |||
this.obj.stats.addStat(s, -val); | |||
} | |||
}, | |||
afterRescaleItemStats: function (item) { | |||
if (['oneHanded', 'twoHanded'].indexOf(item.slot) == -1) | |||
return; | |||
var stats = item.stats; | |||
for (var s in stats) { | |||
stats[s] *= 2; | |||
} | |||
} | |||
} | |||
}; | |||
@@ -20,7 +20,7 @@ define([ | |||
}, | |||
build: function (skipPush, clientObj) { | |||
var o = extend(true, {}, objBase); | |||
let o = extend(true, {}, objBase); | |||
if (clientObj) | |||
o.update = null; | |||
@@ -37,39 +37,35 @@ define([ | |||
}, | |||
transferObject: function (o) { | |||
var obj = this.build(); | |||
let obj = this.build(); | |||
var components = o.components; | |||
let components = o.components; | |||
delete o.components; | |||
delete o.id; | |||
for (var p in o) { | |||
for (var p in o) | |||
obj[p] = o[p]; | |||
} | |||
var cLen = components.length; | |||
for (var i = 0; i < cLen; i++) { | |||
var c = components[i]; | |||
let cLen = components.length; | |||
for (let i = 0; i < cLen; i++) { | |||
let c = components[i]; | |||
var cpn = obj.addComponent(c.type, null, true); | |||
let cpn = obj.addComponent(c.type, null, true); | |||
for (var p in c) { | |||
for (var p in c) | |||
cpn[p] = c[p]; | |||
} | |||
if (cpn.transfer) | |||
cpn.transfer(); | |||
} | |||
obj.fireEvent('transferComplete'); | |||
return obj; | |||
}, | |||
buildObjects: function (list, skipPush) { | |||
var lLen = list.length; | |||
for (var i = 0; i < lLen; i++) { | |||
var l = list[i]; | |||
let lLen = list.length; | |||
for (let i = 0; i < lLen; i++) { | |||
let l = list[i]; | |||
var obj = this.build(skipPush, l.clientObj); | |||
@@ -92,7 +88,7 @@ define([ | |||
//TODO: Clean this part up | |||
var properties = extend(true, {}, l.properties); | |||
['cpnMob'].forEach(function (c) { | |||
var blueprint = properties[c] || null; | |||
let blueprint = properties[c] || null; | |||
if ((blueprint) && (typeof (blueprint) == 'string')) | |||
blueprint = JSON.parse(blueprint); | |||
@@ -101,7 +97,7 @@ define([ | |||
delete properties[c]; | |||
var type = c.replace('cpn', '').toLowerCase(); | |||
let type = c.replace('cpn', '').toLowerCase(); | |||
obj.addComponent(type, blueprint); | |||
}, this); | |||
@@ -112,29 +108,29 @@ define([ | |||
continue; | |||
} | |||
var type = p.replace('cpn', ''); | |||
let type = p.replace('cpn', ''); | |||
type = type[0].toLowerCase() + type.substr(1); | |||
var blueprint = properties[p] || null; | |||
let blueprint = properties[p] || null; | |||
if ((blueprint) && (typeof (blueprint) == 'string')) | |||
blueprint = JSON.parse(blueprint); | |||
obj.addComponent(type, blueprint); | |||
} | |||
var extraProperties = l.extraProperties || {}; | |||
let extraProperties = l.extraProperties || {}; | |||
for (var p in extraProperties) { | |||
var cpn = obj[p]; | |||
var e = extraProperties[p]; | |||
for (var pp in e) { | |||
let cpn = obj[p]; | |||
let e = extraProperties[p]; | |||
for (let pp in e) | |||
cpn[pp] = e[pp]; | |||
} | |||
if (cpn.init) | |||
cpn.init(); | |||
} | |||
if ((this.physics) && (!obj.dead)) { | |||
if (!obj.width) | |||
this.physics.addObject(obj, obj.x, obj.y); | |||
this.physics.addObject(obj, obj.x, obj.y); | |||
else | |||
this.physics.addRegion(obj); | |||
} | |||
@@ -152,14 +148,14 @@ define([ | |||
}, | |||
removeObject: function (obj, callback, useServerId) { | |||
var objects = this.objects; | |||
var oLen = objects.length | |||
var found = null; | |||
for (var i = 0; i < oLen; i++) { | |||
var o = objects[i]; | |||
var match = false; | |||
let objects = this.objects; | |||
let oLen = objects.length; | |||
let found = null; | |||
for (let i = 0; i < oLen; i++) { | |||
let o = objects[i]; | |||
let match = false; | |||
if (useServerId) | |||
match = (o.serverId == obj.id) | |||
match = (o.serverId == obj.id); | |||
else | |||
match = (o.id == obj.id); | |||
@@ -171,7 +167,7 @@ define([ | |||
} | |||
} | |||
var physics = this.physics; | |||
let physics = this.physics; | |||
if (physics) { | |||
if (!found.width) | |||
physics.removeObject(found, found.x, found.y); | |||
@@ -183,26 +179,24 @@ define([ | |||
}, | |||
addObject: function (o, callback) { | |||
var newO = this.build(true); | |||
let newO = this.build(true); | |||
var components = o.components; | |||
let components = o.components; | |||
delete o.components; | |||
for (var p in o) { | |||
for (var p in o) | |||
newO[p] = o[p]; | |||
} | |||
var len = components.length; | |||
for (var i = 0; i < len; i++) { | |||
var c = components[i]; | |||
let len = components.length; | |||
for (let i = 0; i < len; i++) { | |||
let c = components[i]; | |||
newO.addComponent(c.type, c); | |||
var newC = newO[c.type]; | |||
for (var p in c) { | |||
let newC = newO[c.type]; | |||
for (var p in c) | |||
newC[p] = c[p]; | |||
} | |||
} | |||
this.objects.push(newO); | |||
@@ -214,7 +208,7 @@ define([ | |||
return newO; | |||
}, | |||
sendEvent: function (msg) { | |||
var player = this.objects.find(p => p.id == msg.id); | |||
let player = this.objects.find(p => p.id == msg.id); | |||
if (!player) | |||
return; | |||
@@ -224,38 +218,39 @@ define([ | |||
}); | |||
}, | |||
sendEvents: function (msg) { | |||
var players = {}; | |||
var objects = this.objects; | |||
let players = {}; | |||
let objects = this.objects; | |||
var data = msg.data; | |||
for (var e in data) { | |||
var event = data[e]; | |||
var eLen = event.length; | |||
let data = msg.data; | |||
for (let e in data) { | |||
let event = data[e]; | |||
let eLen = event.length; | |||
for (var j = 0; j < eLen; j++) { | |||
var eventEntry = event[j]; | |||
for (let j = 0; j < eLen; j++) { | |||
let eventEntry = event[j]; | |||
var obj = eventEntry.obj; | |||
let obj = eventEntry.obj; | |||
if (e != 'serverModule') { | |||
var to = eventEntry.to; | |||
var toLen = to.length; | |||
for (var i = 0; i < toLen; i++) { | |||
let to = eventEntry.to; | |||
let toLen = to.length; | |||
for (let i = 0; i < toLen; i++) { | |||
var toId = to[i]; | |||
var player = players[toId]; | |||
if (!player) { | |||
var findPlayer = objects.find(o => o.id == toId); | |||
let findPlayer = objects.find(o => o.id == toId); | |||
if (!findPlayer) | |||
continue; | |||
else | |||
else { | |||
player = (players[toId] = { | |||
socket: findPlayer.socket, | |||
events: {} | |||
}); | |||
} | |||
} | |||
var eventList = player.events[e] || (player.events[e] = []); | |||
let eventList = player.events[e] || (player.events[e] = []); | |||
eventList.push(obj); | |||
} | |||
} else | |||
@@ -263,20 +258,19 @@ define([ | |||
} | |||
} | |||
for (var p in players) { | |||
for (let p in players) { | |||
var player = players[p]; | |||
player.socket.emit('events', player.events); | |||
} | |||
}, | |||
updateObject: function (msg) { | |||
var player = this.objects.find(p => p.id == msg.serverId); | |||
let player = this.objects.find(p => p.id == msg.serverId); | |||
if (!player) | |||
return; | |||
var obj = msg.obj; | |||
for (var p in obj) { | |||
let obj = msg.obj; | |||
for (let p in obj) | |||
player[p] = obj[p]; | |||
} | |||
if (obj.dead) | |||
leaderboard.killCharacter(player.name); | |||
@@ -309,11 +303,11 @@ define([ | |||
}, | |||
update: function () { | |||
var objects = this.objects; | |||
var len = objects.length; | |||
let objects = this.objects; | |||
let len = objects.length; | |||
for (var i = 0; i < len; i++) { | |||
var o = objects[i]; | |||
for (let i = 0; i < len; i++) { | |||
let o = objects[i]; | |||
//Don't remove it from the list if it's destroyed, but don't update it either | |||
//That's syncer's job | |||
@@ -2248,13 +2248,6 @@ | |||
} | |||
} | |||
}, | |||
"string_decoder": { | |||
"version": "1.0.3", | |||
"bundled": true, | |||
"requires": { | |||
"safe-buffer": "5.1.1" | |||
} | |||
}, | |||
"string-width": { | |||
"version": "1.0.2", | |||
"bundled": true, | |||
@@ -2264,6 +2257,13 @@ | |||
"strip-ansi": "3.0.1" | |||
} | |||
}, | |||
"string_decoder": { | |||
"version": "1.0.3", | |||
"bundled": true, | |||
"requires": { | |||
"safe-buffer": "5.1.1" | |||
} | |||
}, | |||
"stringstream": { | |||
"version": "0.0.5", | |||
"bundled": true | |||
@@ -2386,6 +2386,11 @@ | |||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", | |||
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" | |||
}, | |||
"string-template": { | |||
"version": "0.2.1", | |||
"resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", | |||
"integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" | |||
}, | |||
"string_decoder": { | |||
"version": "1.0.3", | |||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", | |||
@@ -2394,11 +2399,6 @@ | |||
"safe-buffer": "5.1.1" | |||
} | |||
}, | |||
"string-template": { | |||
"version": "0.2.1", | |||
"resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", | |||
"integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" | |||
}, | |||
"stringstream": { | |||
"version": "0.0.5", | |||
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", | |||
@@ -46,7 +46,7 @@ define([ | |||
map.init(args); | |||
if (!map.instanced) { | |||
var fakeInstance = { | |||
let fakeInstance = { | |||
objects: objects, | |||
syncer: syncer, | |||
physics: physics, | |||
@@ -119,14 +119,14 @@ define([ | |||
}, | |||
addObject: function (msg) { | |||
var obj = msg.obj; | |||
let obj = msg.obj; | |||
obj.serverId = obj.id; | |||
delete obj.id; | |||
if ((msg.keepPos) && (!physics.isValid(obj.x, obj.y))) | |||
msg.keepPos = false; | |||
var spawnPos = map.getSpawnPos(obj); | |||
let spawnPos = map.getSpawnPos(obj); | |||
if ((!msg.keepPos) || (obj.x == null)) { | |||
obj.x = spawnPos.x; | |||
@@ -140,22 +140,14 @@ define([ | |||
if (!msg.transfer) | |||
objects.addObject(obj, this.onAddObject.bind(this)); | |||
else { | |||
var o = objects.transferObject(obj); | |||
let o = objects.transferObject(obj); | |||
questBuilder.obtain(o); | |||
var maxLevel = o.instance.zone.level[1]; | |||
if (maxLevel < o.stats.values.level) | |||
o.stats.rescale(maxLevel); | |||
} | |||
}, | |||
onAddObject: function (obj) { | |||
if (obj.player) | |||
obj.stats.onLogin(); | |||
var maxLevel = obj.instance.zone.level[1]; | |||
if (maxLevel < obj.stats.values.level) | |||
obj.stats.rescale(maxLevel); | |||
questBuilder.obtain(obj); | |||
obj.fireEvent('afterMove'); | |||
@@ -167,35 +159,33 @@ define([ | |||
} | |||
}, | |||
updateObject: function (msg) { | |||
var obj = objects.find(o => o.serverId == msg.id); | |||
let obj = objects.find(o => o.serverId == msg.id); | |||
if (!obj) | |||
return; | |||
var msgObj = msg.obj; | |||
let msgObj = msg.obj; | |||
var components = msgObj.components || []; | |||
let components = msgObj.components || []; | |||
delete msgObj.components; | |||
for (var p in msgObj) { | |||
for (var p in msgObj) | |||
obj[p] = msgObj[p]; | |||
} | |||
var cLen = components.length; | |||
for (var i = 0; i < cLen; i++) { | |||
var c = components[i]; | |||
var component = obj[c.type]; | |||
for (var p in c) { | |||
let cLen = components.length; | |||
for (let i = 0; i < cLen; i++) { | |||
let c = components[i]; | |||
let component = obj[c.type]; | |||
for (var p in c) | |||
component[p] = c[p]; | |||
} | |||
} | |||
}, | |||
queueAction: function (msg) { | |||
var obj = objects.find(o => o.serverId == msg.id); | |||
let obj = objects.find(o => o.serverId == msg.id); | |||
if (!obj) | |||
return; | |||
else if (msg.action.action == 'move') { | |||
var moveEntries = obj.actionQueue.filter(q => (q.action == 'move')).length; | |||
let moveEntries = obj.actionQueue.filter(q => (q.action == 'move')).length; | |||
if (moveEntries >= 50) | |||
return; | |||
} | |||
@@ -204,14 +194,14 @@ define([ | |||
}, | |||
performAction: function (msg) { | |||
var obj = null; | |||
var targetId = msg.action.targetId; | |||
let obj = null; | |||
let targetId = msg.action.targetId; | |||
if (!targetId) | |||
obj = objects.find(o => o.serverId == msg.id); | |||
else { | |||
obj = objects.find(o => o.id == targetId); | |||
if (obj) { | |||
var action = msg.action; | |||
let action = msg.action; | |||
if (!action.data) | |||
action.data = {}; | |||
action.data.sourceId = msg.id; | |||
@@ -225,7 +215,7 @@ define([ | |||
}, | |||
removeObject: function (msg) { | |||
var obj = msg.obj; | |||
let obj = msg.obj; | |||
obj = objects.find(o => o.serverId == obj.id); | |||
if (!obj) { | |||
//We should probably never reach this | |||
@@ -266,10 +256,10 @@ define([ | |||
this.ttlGen--; | |||
} | |||
var instances = this.instances; | |||
var iLen = instances.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var instance = instances[i]; | |||
let instances = this.instances; | |||
let iLen = instances.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let instance = instances[i]; | |||
instance.objects.update(); | |||
instance.spawners.update(); | |||
@@ -279,7 +269,7 @@ define([ | |||
instance.syncer.update(); | |||
if (instance.closeTtl != null) { | |||
var hasPlayers = instance.objects.objects.some(o => o.player); | |||
let hasPlayers = instance.objects.objects.some(o => o.player); | |||
if (hasPlayers) { | |||
delete instance.closeTtl; | |||
continue; | |||
@@ -292,7 +282,7 @@ define([ | |||
iLen--; | |||
} | |||
} else { | |||
var isEmpty = !instance.objects.objects.some(o => o.player); | |||
let isEmpty = !instance.objects.objects.some(o => o.player); | |||
if (isEmpty) { | |||
//Zones reset after being empty for 10 minutes | |||
instance.closeTtl = 2; | |||
@@ -304,19 +294,19 @@ define([ | |||
}, | |||
addObject: function (msg) { | |||
var obj = msg.obj; | |||
var instanceId = msg.instanceId; | |||
let obj = msg.obj; | |||
let instanceId = msg.instanceId; | |||
//Maybe a party member is in here already? | |||
var social = obj.components.find(c => c.type == 'social'); | |||
let social = obj.components.find(c => c.type == 'social'); | |||
if ((social) && (social.party)) { | |||
var party = social.party; | |||
var instances = this.instances; | |||
var iLen = instances.length; | |||
for (var i = 0; i < iLen; i++) { | |||
var instance = instances[i]; | |||
let party = social.party; | |||
let instances = this.instances; | |||
let iLen = instances.length; | |||
for (let i = 0; i < iLen; i++) { | |||
let instance = instances[i]; | |||
var partyInside = instance.objects.objects.some(o => party.indexOf(o.serverId) > -1); | |||
let partyInside = instance.objects.objects.some(o => party.indexOf(o.serverId) > -1); | |||
if (partyInside) { | |||
if (instance.id != obj.instanceId) | |||
msg.keepPos = false; | |||
@@ -331,7 +321,7 @@ define([ | |||
if (msg.transfer) | |||
msg.keepPos = false; | |||
var exists = this.instances.find(i => i.id == instanceId); | |||
let exists = this.instances.find(i => i.id == instanceId); | |||
if (exists) { | |||
if ((msg.keepPos) && (!exists.physics.isValid(obj.x, obj.y))) | |||
@@ -364,7 +354,7 @@ define([ | |||
if (!msg.transfer) | |||
exists.objects.addObject(obj, this.onAddObject.bind(this, msg.keepPos)); | |||
else { | |||
var newObj = exists.objects.transferObject(obj); | |||
let newObj = exists.objects.transferObject(obj); | |||
this.onAddObject(false, newObj); | |||
} | |||
@@ -380,7 +370,7 @@ define([ | |||
}, | |||
onAddObject: function (keepPos, obj) { | |||
if (!keepPos) { | |||
var spawnPos = obj.instance.map.getSpawnPos(obj); | |||
let spawnPos = obj.instance.map.getSpawnPos(obj); | |||
obj.x = spawnPos.x; | |||
obj.y = spawnPos.y; | |||
@@ -391,10 +381,6 @@ define([ | |||
if (obj.player) | |||
obj.stats.onLogin(); | |||
var maxLevel = obj.instance.zone.level[1]; | |||
if (maxLevel < obj.stats.values.level) | |||
obj.stats.rescale(maxLevel); | |||
obj.fireEvent('afterMove'); | |||
if (obj.dead) { | |||
@@ -405,45 +391,43 @@ define([ | |||
} | |||
}, | |||
updateObject: function (msg) { | |||
var id = msg.id; | |||
var instanceId = msg.instanceId; | |||
let id = msg.id; | |||
let instanceId = msg.instanceId; | |||
var exists = this.instances.find(i => i.id == instanceId); | |||
let exists = this.instances.find(i => i.id == instanceId); | |||
if (!exists) | |||
return; | |||
var obj = exists.objects.find(o => o.serverId == id); | |||
let obj = exists.objects.find(o => o.serverId == id); | |||
if (!obj) | |||
return; | |||
var msgObj = msg.obj; | |||
let msgObj = msg.obj; | |||
var components = msgObj.components || []; | |||
let components = msgObj.components || []; | |||
delete msgObj.components; | |||
for (var p in msgObj) { | |||
for (var p in msgObj) | |||
obj[p] = msgObj[p]; | |||
} | |||
var cLen = components.length; | |||
for (var i = 0; i < cLen; i++) { | |||
var c = components[i]; | |||
var component = obj[c.type]; | |||
for (var p in c) { | |||
let cLen = components.length; | |||
for (let i = 0; i < cLen; i++) { | |||
let c = components[i]; | |||
let component = obj[c.type]; | |||
for (var p in c) | |||
component[p] = c[p]; | |||
} | |||
} | |||
}, | |||
performAction: function (msg) { | |||
var id = msg.id; | |||
var instanceId = msg.instanceId; | |||
let id = msg.id; | |||
let instanceId = msg.instanceId; | |||
var exists = this.instances.find(i => i.id == instanceId); | |||
let exists = this.instances.find(i => i.id == instanceId); | |||
if (!exists) | |||
return; | |||
var obj = exists.objects.find(o => o.serverId == id); | |||
let obj = exists.objects.find(o => o.serverId == id); | |||
if (!obj) | |||
return; | |||
@@ -451,17 +435,17 @@ define([ | |||
}, | |||
queueAction: function (msg) { | |||
var id = msg.id; | |||
var instanceId = msg.instanceId; | |||
let id = msg.id; | |||
let instanceId = msg.instanceId; | |||
var exists = this.instances.find(i => i.id == instanceId); | |||
let exists = this.instances.find(i => i.id == instanceId); | |||
if (!exists) | |||
return; | |||
var obj = exists.objects.find(o => o.serverId == id); | |||
let obj = exists.objects.find(o => o.serverId == id); | |||
if (obj) { | |||
if (msg.action.action == 'move') { | |||
var moveEntries = obj.actionQueue.filter(q => (q.action == 'move')).length; | |||
let moveEntries = obj.actionQueue.filter(q => (q.action == 'move')).length; | |||
if (moveEntries >= 50) | |||
return; | |||
} | |||
@@ -472,9 +456,9 @@ define([ | |||
removeObject: function (msg) { | |||
var obj = msg.obj; | |||
var instanceId = msg.instanceId; | |||
let instanceId = msg.instanceId; | |||
var exists = this.instances.find(i => i.id == instanceId); | |||
let exists = this.instances.find(i => i.id == instanceId); | |||
if (!exists) | |||
return; | |||
@@ -494,7 +478,7 @@ define([ | |||
}, | |||
createInstance: function (objToAdd, transfer) { | |||
var newMap = { | |||
let newMap = { | |||
name: map.name, | |||
spawn: extend(true, [], map.spawn), | |||
clientMap: extend(true, {}, map.clientMap) | |||
@@ -502,15 +486,15 @@ define([ | |||
newMap.getSpawnPos = map.getSpawnPos.bind(newMap); | |||
//Hack: We need to actually just always use the instanced eventEmitter | |||
var eventQueue = eventEmitter.queue; | |||
let eventQueue = eventEmitter.queue; | |||
delete eventEmitter.queue; | |||
var newEventEmitter = extend(true, { | |||
let newEventEmitter = extend(true, { | |||
queue: [] | |||
}, eventEmitter); | |||
eventEmitter.queue = eventQueue; | |||
var instance = { | |||
id: objToAdd.name + '_' + (+new Date), | |||
let instance = { | |||
id: objToAdd.name + '_' + (+new Date()), | |||
objects: extend(true, {}, objects), | |||
spawners: extend(true, {}, spawners), | |||
syncer: extend(true, {}, syncer), | |||
@@ -532,7 +516,7 @@ define([ | |||
this.instances.push(instance); | |||
var onDone = this.instanced.onCreateInstance.bind(this, instance, objToAdd, transfer); | |||
let onDone = this.instanced.onCreateInstance.bind(this, instance, objToAdd, transfer); | |||
if (map.custom) { | |||
instance.customMap = extend(true, {}, customMap); | |||
@@ -548,7 +532,7 @@ define([ | |||
objToAdd.serverId = objToAdd.id; | |||
delete objToAdd.id; | |||
var obj = null; | |||
let obj = null; | |||
instance.syncer.queue('onGetMap', instance.map.clientMap, [objToAdd.serverId]); | |||
@@ -557,7 +541,7 @@ define([ | |||
else { | |||
obj = instance.objects.transferObject(objToAdd); | |||
var spawnPos = instance.map.getSpawnPos(obj); | |||
let spawnPos = instance.map.getSpawnPos(obj); | |||
obj.x = spawnPos.x; | |||
obj.y = spawnPos.y; | |||
@@ -565,10 +549,6 @@ define([ | |||
instance.questBuilder.obtain(obj); | |||
} | |||
var maxLevel = obj.instance.zone.level[1]; | |||
if (maxLevel < obj.stats.values.level) | |||
obj.stats.rescale(maxLevel); | |||
process.send({ | |||
method: 'object', | |||
serverId: obj.serverId, | |||
@@ -586,6 +566,6 @@ define([ | |||
return obj; | |||
} | |||
}, | |||
} | |||
}; | |||
}); |