Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

77 rader
1.3 KiB

  1. const defaultConfig = [{
  2. name: 'Iron Bar',
  3. sprite: [0, 0],
  4. quality: 0,
  5. chance: 15
  6. }, {
  7. name: 'Cloth Scrap',
  8. sprite: [0, 1],
  9. quality: 0,
  10. chance: 15
  11. }, {
  12. name: 'Leather Scrap',
  13. sprite: [0, 7],
  14. quality: 0,
  15. chance: 15
  16. }, {
  17. name: 'Skyblossom',
  18. sprite: [1, 2],
  19. quality: 0,
  20. chance: 8
  21. }, {
  22. name: 'Common Essence',
  23. sprite: [0, 2],
  24. quality: 0,
  25. chance: 5
  26. }, {
  27. name: 'Magic Essence',
  28. sprite: [0, 3],
  29. quality: 1,
  30. chance: 2
  31. }, {
  32. name: 'Rare Essence',
  33. sprite: [0, 4],
  34. quality: 2,
  35. chance: 1
  36. }];
  37. const buildPool = config => {
  38. const pool = [];
  39. config.forEach(c => {
  40. for (let i = 0; i < c.chance; i++)
  41. pool.push(c.name);
  42. });
  43. return pool;
  44. };
  45. const defaultPool = buildPool(defaultConfig);
  46. module.exports = (itemCount, useConfig) => {
  47. const config = useConfig || defaultConfig;
  48. const pool = useConfig ? buildPool(useConfig) : defaultPool;
  49. const items = [];
  50. for (let i = 0; i < itemCount; i++) {
  51. let pickName = pool[~~(Math.random() * pool.length)];
  52. const pick = config.find(f => f.name === pickName);
  53. let item = items.find(f => f.name === pickName);
  54. if (!item) {
  55. items.push({
  56. name: pick.name,
  57. material: true,
  58. quality: pick.quality,
  59. sprite: pick.sprite,
  60. quantity: pick.quantity || 1
  61. });
  62. } else
  63. item.quantity += (pick.quantity || 1);
  64. }
  65. return items;
  66. };