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.
 
 
 

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