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.

97 lines
2.3 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];
  19. var currencyGenerators = [g10];
  20. var generator = {
  21. spellChance: 0.02,
  22. currencyChance: 0.05,
  23. generate: function (blueprint) {
  24. var isSpell = false;
  25. var isCurrency = false;
  26. var hadBlueprint = !!blueprint;
  27. blueprint = blueprint || {};
  28. var item = {};
  29. if ((!blueprint.slot) && (!blueprint.noSpell)) {
  30. isSpell = blueprint.spell;
  31. if ((!isSpell) && ((!hadBlueprint) || ((!blueprint.type) && (!blueprint.slot) && (!blueprint.stats)))) {
  32. isSpell = Math.random() < this.spellChance;
  33. if (!isSpell)
  34. isCurrency = Math.random() < this.currencyChance;
  35. }
  36. }
  37. if (blueprint.isSpell)
  38. isSpell = true;
  39. if (isSpell)
  40. spellGenerators.forEach(g => g.generate(item, blueprint));
  41. else if (isCurrency) {
  42. currencyGenerators.forEach(g => g.generate(item, blueprint));
  43. } else if (blueprint.material) {
  44. item.material = true;
  45. item.sprite = blueprint.sprite;
  46. item.noDrop = blueprint.noDrop;
  47. item.noSalvage = blueprint.noSalvage;
  48. item.noDestroy = blueprint.noDestroy;
  49. materialGenerators.forEach(g => g.generate(item, blueprint));
  50. } else if (blueprint.type == 'mtx') {
  51. item = extend(true, {}, blueprint);
  52. delete item.chance;
  53. } else {
  54. generators.forEach(g => g.generate(item, blueprint));
  55. if (blueprint.spellName)
  56. g9.generate(item, blueprint);
  57. }
  58. if (blueprint.spritesheet)
  59. item.spritesheet = blueprint.spritesheet;
  60. if (blueprint.noSalvage)
  61. item.noSalvage = true;
  62. return item;
  63. },
  64. removeStat: function (item, stat) {
  65. if (!stat) {
  66. stat = Object.keys(item.stats)
  67. .filter(s => (s != 'armor'));
  68. stat = stat[~~(Math.random() * stat.length)];
  69. }
  70. delete item.stats[stat];
  71. },
  72. pickRandomSlot: function () {
  73. var item = {};
  74. var blueprint = {};
  75. g3.generate(item, blueprint);
  76. return item.slot;
  77. }
  78. };
  79. return generator;
  80. });