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.
 
 
 

78 lines
1.3 KiB

  1. let config = {
  2. 0: [{
  3. name: 'Common Essence',
  4. sprite: [0, 2]
  5. }, {
  6. name: 'Iron Bar',
  7. sprite: [0, 0]
  8. }, {
  9. name: 'Cloth Scrap',
  10. sprite: [0, 1]
  11. }, {
  12. name: 'Leather Scrap',
  13. sprite: [0, 7]
  14. }],
  15. 1: [{
  16. name: 'Magic Essence',
  17. sprite: [0, 3]
  18. }],
  19. 2: [{
  20. name: 'Rare Essence',
  21. sprite: [0, 4]
  22. }],
  23. 3: [{
  24. name: 'Cerulean Pearl',
  25. sprite: [11, 9]
  26. }, {
  27. name: 'Epic Essence',
  28. sprite: [0, 5]
  29. }],
  30. 4: [{
  31. name: 'Legendary Essence',
  32. sprite: [0, 6]
  33. }]
  34. };
  35. module.exports = {
  36. generate: function (streak) {
  37. let items = [];
  38. let qualityTotals = {
  39. 0: 1 + Math.min(streak * 3, 15),
  40. 1: ~~(streak / 3),
  41. 2: ~~(streak / 5),
  42. 3: ~~(streak / 10),
  43. 4: ~~(streak / 21)
  44. };
  45. for (let p in qualityTotals) {
  46. let total = qualityTotals[p];
  47. let picks = config[p];
  48. while (total > 0) {
  49. let pick = picks[~~(Math.random() * picks.length)];
  50. let amount = 1 + ~~(Math.random() * (total - 1));
  51. total -= amount;
  52. let item = items.find(f => (f.name === pick.name));
  53. if (!item) {
  54. item = extend(true, {
  55. material: true,
  56. quality: p
  57. }, pick);
  58. item.quantity = 0;
  59. items.push(item);
  60. }
  61. item.quantity += amount;
  62. }
  63. }
  64. if (items.length > 0)
  65. items[0].msg = `Daily login reward for ${streak} days:`;
  66. return items;
  67. }
  68. };