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.
 
 
 

143 lines
3.2 KiB

  1. module.exports = {
  2. fixDb: async function () {
  3. await io.deleteAsync({
  4. key: 'list',
  5. table: 'leaderboard'
  6. });
  7. },
  8. fixCharacter: function (player) {
  9. let inv = player.components.find(c => (c.type === 'inventory'));
  10. if ((inv) && (inv.items))
  11. this.fixItems(inv.items);
  12. },
  13. fixCustomChannels: function (customChannels) {
  14. return customChannels
  15. .filter(c => {
  16. return (
  17. c.length <= 15 &&
  18. c.match(/^[0-9a-zA-Z]+$/)
  19. );
  20. });
  21. },
  22. fixStash: function (stash) {
  23. this.fixItems(stash);
  24. },
  25. fixItems: function (items) {
  26. //There are some bugged mounts with cdMax: 0. Set that to 86 as 86 is the new CD (down from 171)
  27. items
  28. .filter(i => i.type === 'mount')
  29. .forEach(i => {
  30. i.cdMax = 86;
  31. });
  32. items
  33. .filter(i => i.name === 'Candy Corn')
  34. .forEach(i => {
  35. i.noDrop = true;
  36. });
  37. items
  38. .filter(i => i.name === 'Enchanted Wreath')
  39. .forEach(i => {
  40. delete i.noDrop;
  41. delete i.noDestroy;
  42. });
  43. items
  44. .filter(i => (i.name === 'Elixir of Infatuation'))
  45. .forEach(function (i) {
  46. i.cdMax = 342;
  47. i.sprite = [1, 0];
  48. });
  49. items
  50. .filter(i => i.name === 'Squashling Vine')
  51. .forEach(i => {
  52. i.petSheet = 'server/mods/iwd-souls-moor/images/skins.png';
  53. i.petCell = 16;
  54. });
  55. items
  56. .filter(i => ((i.name === 'Cowl of Obscurity') && (!i.factions)))
  57. .forEach(function (i) {
  58. i.factions = [{
  59. id: 'gaekatla',
  60. tier: 7
  61. }];
  62. });
  63. items
  64. .filter(i => i.stats && i.stats.magicFind > 135)
  65. .forEach(i => {
  66. let value = '' + i.stats.magicFind;
  67. i.stats.magicFind = ~~(value.substr(value.length - 2));
  68. });
  69. items
  70. .filter(i => (
  71. i.enchantedStats &&
  72. i.slot !== 'tool' &&
  73. Object.keys(i.enchantedStats).some(e => e.indexOf('catch') === 0 || e.indexOf('fish') === 0)
  74. ))
  75. .forEach(function (i) {
  76. let enchanted = i.enchantedStats;
  77. let stats = i.stats;
  78. Object.keys(enchanted).forEach(e => {
  79. if (e.indexOf('catch') === 0 || e.indexOf('fish') === 0) {
  80. delete stats[e];
  81. delete enchanted[e];
  82. }
  83. });
  84. if (!Object.keys(enchanted).length)
  85. delete i.enchantedStats;
  86. });
  87. items
  88. .filter(i => i.factions && i.factions.indexOf && i.factions.some(f => f.id === 'pumpkinSailor') && i.slot === 'finger')
  89. .forEach(i => {
  90. i.noDestroy = false;
  91. });
  92. items
  93. .filter(i => (i.name === 'Steelclaw\'s Bite'))
  94. .forEach(function (i) {
  95. let effect = i.effects[0];
  96. if (!effect.properties) {
  97. effect.properties = {
  98. element: 'poison'
  99. };
  100. } else if (!effect.properties.element)
  101. effect.properties.element = 'poison';
  102. });
  103. items
  104. .filter(f => f.effects?.[0]?.factionId === 'akarei' && !f.effects[0].properties)
  105. .forEach(function (i) {
  106. let effect = i.effects[0];
  107. let chance = parseFloat(effect.text.split(' ')[0].replace('%', ''));
  108. effect.properties = {
  109. chance: chance
  110. };
  111. });
  112. items
  113. .filter(f => ((f.stats) && (f.stats.dmgPercent)))
  114. .forEach(function (i) {
  115. i.stats.physicalPercent = i.stats.dmgPercent;
  116. delete i.stats.dmgPercent;
  117. if ((i.enchantedStats) && (i.enchantedStats.dmgPercent)) {
  118. i.enchantedStats.physicalPercent = i.enchantedStats.dmgPercent;
  119. delete i.enchantedStats.dmgPercent;
  120. }
  121. });
  122. }
  123. };