Browse Source

legendary item effects

tags/v0.1.8^2
big bad waffle 6 years ago
parent
commit
b30c2b6544
12 changed files with 173 additions and 50 deletions
  1. +11
    -3
      src/client/js/components/inventory.js
  2. +3
    -5
      src/client/ui/templates/inventory/inventory.js
  3. +15
    -11
      src/server/components/inventory.js
  4. +14
    -13
      src/server/config/effects/effectSlowed.js
  5. +23
    -0
      src/server/config/itemEffects/freezeOnHit.js
  6. +4
    -5
      src/server/items/generator.js
  7. +33
    -0
      src/server/items/generators/effects.js
  8. +12
    -6
      src/server/items/generators/level.js
  9. +6
    -6
      src/server/items/generators/worth.js
  10. +24
    -0
      src/server/items/itemEffects.js
  11. +1
    -1
      src/server/mods/event-xmas/factions/theWinterMan.js
  12. +27
    -0
      src/server/mods/feature-cards/cards.js

+ 11
- 3
src/client/js/components/inventory.js View File

@@ -19,8 +19,12 @@ define([
events.emit('onGetItems', this.items);
},
extend: function (blueprint) {
if (blueprint.destroyItems)
var rerender = false;

if (blueprint.destroyItems) {
rerender = true;
events.emit('onDestroyItems', blueprint.destroyItems);
}

if (blueprint.getItems) {
var items = this.items;
@@ -40,6 +44,8 @@ define([
return (item.id == nId);
});
if (findItem) {
rerender = (findItem.pos != nItem.pos);

for (var p in findItem) {
delete findItem[p];
}
@@ -49,13 +55,15 @@ define([
newItems.splice(i, 1);
i--;
nLen--;
} else
} else {
rerender = true;
nItem.isNew = true;
}
}

this.items.push.apply(this.items, blueprint.getItems || []);

events.emit('onGetItems', this.items);
events.emit('onGetItems', this.items, rerender);
}
}
};


+ 3
- 5
src/client/ui/templates/inventory/inventory.js View File

@@ -393,19 +393,17 @@ define([
events.emit('onShowItemTooltip', item, ttPos, compare, false, this.shiftDown);
},

onGetItems: function (items) {
onGetItems: function (items, rerender) {
this.items = items;

if (this.shown)
if ((this.shown) && (rerender))
this.build();
},
onDestroyItems: function (itemIds) {
itemIds.forEach(function (id) {
var item = this.items.find(i => i.id == id);
if (item == this.hoverItem) {
//this.hoverItem = null;
if (item == this.hoverItem)
this.hideTooltip();
}

this.items.spliceWhere(i => i.id == id);
}, this);


+ 15
- 11
src/server/components/inventory.js View File

@@ -6,7 +6,8 @@ define([
'config/classes',
'mtx/mtx',
'config/factions',
'misc/events'
'misc/events',
'items/itemEffects'
], function (
generator,
salvager,
@@ -15,7 +16,8 @@ define([
classes,
mtx,
factions,
events
events,
itemEffects
) {
return {
type: 'inventory',
@@ -93,15 +95,16 @@ define([
var mtxModule = require(mtxUrl);

e.events = mtxModule.events;
return;
} else if (e.factionId) {
var faction = factions.getFaction(e.factionId);
var statGenerator = faction.uniqueStat;
statGenerator.generate(item);
} else {
var effectUrl = itemEffects.get(e.type);
var effectModule = require(effectUrl);

e.events = effectModule.events;
}

if (!e.factionId)
return;

var faction = factions.getFaction(e.factionId);
var statGenerator = faction.uniqueStat;
statGenerator.generate(item);
});
}

@@ -913,7 +916,8 @@ define([
factionId: e.factionId,
text: e.text,
properties: e.properties,
mtx: e.mtx
mtx: e.mtx,
name: e.name
}));
}



+ 14
- 13
src/server/config/effects/effectSlowed.js View File

@@ -1,35 +1,36 @@
define([
], function(
], function (
) {
return {
type: 'slowed',
chance: 0.3,

events: {
beforeMove: function(targetPos) {
if (Math.random() < 0.3)
beforeMove: function (targetPos) {
if (Math.random() < this.chance)
return;

targetPos.success = false;
},

beforeDealDamage: function(damage) {
beforeDealDamage: function (damage) {
if (!damage)
return;
if (Math.random() < 0.3)
if (Math.random() < this.chance)
return;
damage.failed = true;
},

beforeCastSpell: function(successObj) {
if (Math.random() < 0.3)
beforeCastSpell: function (successObj) {
if (Math.random() < this.chance)
return;
successObj.success = false;
}
}
};
});
});

+ 23
- 0
src/server/config/itemEffects/freezeOnHit.js View File

@@ -0,0 +1,23 @@
define([

], function (

) {
return {
events: {
afterDealDamage: function (item, damage, target) {
var rolls = item.effects.find(e => (e.type == 'freezeOnHit')).rolls;

var chanceRoll = Math.random() * 100;
if (chanceRoll >= rolls.chance)
return;

target.effects.addEffect({
type: 'slowed',
chance: 1,
ttl: rolls.duration
});
}
}
};
});

+ 4
- 5
src/server/items/generator.js View File

@@ -8,13 +8,12 @@ define([
'items/generators/worth',
'items/generators/quantity',
'items/generators/spellbook',
'items/generators/currency'
'items/generators/currency',
'items/generators/effects'
], function (
g1, g2, g3, g4, g5, g6, g7, g8,
g9,
g10
g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11
) {
var generators = [].slice.apply(arguments, [0, 7]);
var generators = [g1, g2, g3, g4, g5, g6, g11, g7];
var materialGenerators = [g6, g8];
var spellGenerators = [g1, g9];
var currencyGenerators = [g10];


+ 33
- 0
src/server/items/generators/effects.js View File

@@ -0,0 +1,33 @@
define([

], function (

) {
return {
generate: function (item, blueprint) {
if (!blueprint.effects)
return;

item.effects = blueprint.effects.map(function (e) {
var rolls = e.rolls;
var newRolls = {};
for (var p in rolls) {
var isInt = (p.indexOf('i_') == 0);
var fieldName = p.replace('i_', '');

var range = rolls[p];
var value = range[0] + (Math.random() * (range[1] - range[0]));
if (isInt)
value = ~~value;

newRolls[fieldName] = value;
}

return {
type: e.type,
rolls: newRolls
};
});
}
};
});

+ 12
- 6
src/server/items/generators/level.js View File

@@ -1,11 +1,17 @@
define([
], function(
], function (
) {
return {
generate: function(item, blueprint) {
item.level = ~~(blueprint.level || 1);
generate: function (item, blueprint) {
var level = blueprint.level;
if (level instanceof Array) {
item.level = level[0] + ~~(Math.random() * (level[1] - level[0]));
return;
}

item.level = ~~(level || 1);
}
};
});
});

+ 6
- 6
src/server/items/generators/worth.js View File

@@ -1,11 +1,11 @@
define([
], function(
], function (
) {
return {
generate: function(item, blueprint) {
item.worth = Math.pow(item.level, 1.5) + (Math.pow((item.quality + 1), 2) * 10);
generate: function (item, blueprint) {
item.worth = ~~(Math.pow(item.level, 1.5) + (Math.pow((item.quality + 1), 2) * 10));
}
};
});
});

+ 24
- 0
src/server/items/itemEffects.js View File

@@ -0,0 +1,24 @@
define([
'misc/events'
], function (
events
) {
var list = {

};

return {
init: function () {
events.emit('onBeforeGetItemEffectList', list);
},

get: function (name) {
var res = list[name];

if (!res)
return 'config/itemEffects/' + name;

return res;
}
};
});

+ 1
- 1
src/server/mods/event-xmas/factions/theWinterMan.js View File

@@ -6,7 +6,7 @@ define([
return {
id: 'theWinterMan',
name: 'The Winter Man',
description: ``,
description: `Bearer of Gifts, Friend of the Downtrodden and the Watcher in the Snow.`,

rewards: {



+ 27
- 0
src/server/mods/feature-cards/cards.js View File

@@ -23,6 +23,12 @@ define([
reward: 'Perfect Level 10 Ring',
setSize: 3,
mobName: 'flamingo'
},
'Benthic Incantation': {
chance: 0.05,
reward: `Princess Morgawsa's Trident`,
setSize: 7,
zone: 'estuary'
}
};

@@ -132,6 +138,27 @@ define([
perfection: 1,
slot: 'finger'
});
},

"Princess Morgawsa's Trident": function () {
return itemGenerator.generate({
name: `Princess Morgawsa's Trident`,
level: [10, 15],
quality: 4,
noSpell: true,
slot: 'twoHanded',
sprite: [0, 0],
spritesheet: '../../../images/legendaryItems.png',
type: 'Trident',
spellName: 'magic missile',
effects: [{
type: 'freezeOnHit',
rolls: {
i_chance: [2, 5],
i_duration: [2, 4]
}
}]
});
}
}
};


Loading…
Cancel
Save