You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

105 lines
2.6 KiB

  1. define([
  2. 'items/generators/level',
  3. 'items/generators/quality',
  4. 'items/generators/slots',
  5. 'items/generators/types',
  6. 'items/generators/stats',
  7. 'items/generators/names',
  8. 'items/generators/worth',
  9. 'items/generators/quantity',
  10. 'items/generators/spellbook',
  11. 'items/generators/currency',
  12. 'items/generators/effects'
  13. ], function (
  14. g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11
  15. ) {
  16. var generators = [g1, g2, g3, g4, g5, g6, g11, g7];
  17. var materialGenerators = [g6, g8];
  18. var spellGenerators = [g1, g9, g7];
  19. var currencyGenerators = [g10];
  20. var generator = {
  21. spellChance: 0.02,
  22. currencyChance: 0.025,
  23. generate: function (blueprint, ownerLevel) {
  24. var isSpell = false;
  25. var isCurrency = false;
  26. var hadBlueprint = !!blueprint;
  27. blueprint = blueprint || {};
  28. var item = {};
  29. var currencyChance = this.currencyChance;
  30. if ((blueprint.level) && (ownerLevel))
  31. currencyChance *= Math.max(0, (10 - Math.abs(ownerLevel - blueprint.level)) / 10);
  32. if ((!blueprint.slot) && (!blueprint.noSpell)) {
  33. isSpell = blueprint.spell;
  34. isCurrency = blueprint.currency;
  35. if ((!isCurrency) && (!isSpell) && ((!hadBlueprint) || ((!blueprint.type) && (!blueprint.slot) && (!blueprint.stats)))) {
  36. isSpell = Math.random() < this.spellChance;
  37. if (!isSpell)
  38. isCurrency = Math.random() < currencyChance;
  39. }
  40. }
  41. if (blueprint.isSpell)
  42. isSpell = true;
  43. if (isSpell)
  44. spellGenerators.forEach(g => g.generate(item, blueprint));
  45. else if (isCurrency) {
  46. currencyGenerators.forEach(g => g.generate(item, blueprint));
  47. } else if (blueprint.material) {
  48. item.material = true;
  49. item.sprite = blueprint.sprite;
  50. item.noDrop = blueprint.noDrop;
  51. item.noSalvage = blueprint.noSalvage;
  52. item.noDestroy = blueprint.noDestroy;
  53. materialGenerators.forEach(g => g.generate(item, blueprint));
  54. } else if (blueprint.type == 'mtx') {
  55. item = extend(true, {}, blueprint);
  56. delete item.chance;
  57. } else {
  58. generators.forEach(g => g.generate(item, blueprint));
  59. if (blueprint.spellName)
  60. g9.generate(item, blueprint);
  61. }
  62. if (blueprint.spritesheet)
  63. item.spritesheet = blueprint.spritesheet;
  64. if (blueprint.noSalvage)
  65. item.noSalvage = true;
  66. if (blueprint.uses)
  67. item.uses = blueprint.uses;
  68. return item;
  69. },
  70. removeStat: function (item, stat) {
  71. if (!stat) {
  72. stat = Object.keys(item.stats)
  73. .filter(s => (s != 'armor'));
  74. stat = stat[~~(Math.random() * stat.length)];
  75. }
  76. delete item.stats[stat];
  77. },
  78. pickRandomSlot: function () {
  79. var item = {};
  80. var blueprint = {};
  81. g3.generate(item, blueprint);
  82. return item.slot;
  83. }
  84. };
  85. return generator;
  86. });