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.
 
 
 

107 lines
2.1 KiB

  1. define([
  2. './generators/level',
  3. './generators/quality',
  4. './generators/slots',
  5. './generators/types',
  6. './generators/stats',
  7. './generators/names',
  8. './generators/worth',
  9. './generators/spellbook',
  10. './salvager'
  11. ], function(
  12. g1, g2, g3, g4, g5, g6, g7,
  13. g8
  14. ) {
  15. var generators = [].slice.apply(arguments, [0, 7]);
  16. var spellGenerators = [g1, g8];
  17. var generator = {
  18. spellChance: 0.15,
  19. generate: function(blueprint) {
  20. var hadBlueprint = !!blueprint;
  21. blueprint = blueprint || {};
  22. var item = {};
  23. if ((!blueprint.slot) && (!blueprint.noSpell)) {
  24. var isSpell = blueprint.spell;
  25. if ((!isSpell) && ((!hadBlueprint) || ((!blueprint.type) && (!blueprint.slot) && (!blueprint.stats))))
  26. isSpell = Math.random() < this.spellChance;
  27. }
  28. if (isSpell)
  29. spellGenerators.forEach(g => g.generate(item, blueprint));
  30. else {
  31. generators.forEach(g => g.generate(item, blueprint));
  32. if (blueprint.spellName)
  33. g8.generate(item, blueprint);
  34. }
  35. if (blueprint.noSalvage)
  36. item.noSalvage = true;
  37. return item;
  38. },
  39. removeStat: function(item, stat) {
  40. if (!stat) {
  41. stat = Object.keys(item.stats)
  42. .filter(s => (s != 'armor'));
  43. stat = stat[~~(Math.random() * stat.length)];
  44. }
  45. delete item.stats[stat];
  46. },
  47. pickRandomSlot: function() {
  48. var item = {};
  49. var blueprint = {};
  50. g3.generate(item, blueprint);
  51. return item.slot;
  52. }
  53. };
  54. /*require('misc/random');
  55. for (var i = 0; i < 1000; i++) {
  56. var item = generator.generate();
  57. if (item.slot == 'tool') {
  58. console.log(item);
  59. }
  60. }*/
  61. /*var qualities = [0, 0, 0, 0, 0];
  62. var count = 716;
  63. for (var i = 0; i < count; i++) {
  64. qualities[generator.generate({
  65. magicFind: 200,
  66. noSpell: true
  67. }).quality]++;
  68. }
  69. //console.log(qualities.map(q => (q / count) * 100));
  70. console.log(qualities.map(q => q));*/
  71. /*for (var i = 0; i < 10; i++) {
  72. var item = generator.generate({
  73. quality: 4,
  74. level: 10
  75. });
  76. if (item.slot)
  77. console.log(item.slot + ' ' + ~~item.stats.armor);
  78. }*/
  79. /*var max = 0;
  80. for (var i = 0; i < 1000; i++) {
  81. var roll = random.norm(20, 32);
  82. if (roll > max)
  83. max = roll;
  84. }
  85. console.log(max);*/
  86. return generator;
  87. });