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.
 
 
 

220 regels
4.8 KiB

  1. define([
  2. 'items/generator'
  3. ], function (
  4. itemGenerator
  5. ) {
  6. var config = {
  7. 'Runecrafter\'s Toil': {
  8. chance: 0.025,
  9. reward: 'Level 10 Rune',
  10. setSize: 3,
  11. mobLevel: [3, 100]
  12. },
  13. 'Godly Promise': {
  14. chance: 0.015,
  15. reward: 'Level 15 Legendary Weapon',
  16. setSize: 6,
  17. zone: 'sewer'
  18. },
  19. 'The Other Heirloom': {
  20. chance: 0.02,
  21. reward: 'Perfect Level 10 Ring',
  22. setSize: 3,
  23. mobName: 'flamingo'
  24. },
  25. 'Benthic Incantation': {
  26. chance: 0.015,
  27. reward: `Princess Morgawsa's Trident`,
  28. setSize: 12,
  29. zone: 'estuary'
  30. },
  31. 'Fangs of Fury': {
  32. chance: 0.2,
  33. reward: `Steelclaw's Bite`,
  34. setSize: 20,
  35. mobName: 'steelclaw'
  36. },
  37. 'Tradesman\'s Pride': {
  38. chance: 0.01,
  39. reward: 'Five Random Idols',
  40. setSize: 10
  41. }
  42. };
  43. return {
  44. init: function () {
  45. },
  46. fixCard: function (card) {
  47. var template = config[card.name];
  48. if (!template)
  49. return;
  50. card.setSize = template.setSize;
  51. },
  52. getCard: function (looter, mob) {
  53. var pool = [];
  54. var mobLevel = mob.stats.values.level;
  55. var configs = extend(true, {}, config);
  56. looter.instance.eventEmitter.emit('onBeforeGetCardsConfig', configs);
  57. Object.keys(configs).forEach(function (c) {
  58. var card = configs[c];
  59. if (!card.chance)
  60. return;
  61. var rqrLevel = card.mobLevel;
  62. if (rqrLevel) {
  63. if ((rqrLevel.push) && ((mobLevel < rqrLevel[0]) || (mobLevel > rqrLevel[1])))
  64. return;
  65. else if ((!rqrLevel.push) && (mobLevel != rqrLevel))
  66. return;
  67. }
  68. var mobName = card.mobName;
  69. if (mobName) {
  70. if ((mobName.toLowerCase) && (mob.name.toLowerCase() != mobName.toLowerCase()))
  71. return;
  72. else if ((mobName.push) && (!mobName.some(m => (m.toLowerCase() == mob.name.toLowerCase()))))
  73. return;
  74. }
  75. if ((card.zone) && (looter.zoneName != card.zone))
  76. return;
  77. if (Math.random() >= card.chance)
  78. return;
  79. pool.push(c);
  80. }, this);
  81. if (pool.length == 0)
  82. return;
  83. var pickName = pool[~~(Math.random() * pool.length)];
  84. var pick = configs[pickName];
  85. var card = {
  86. name: pickName,
  87. spritesheet: pick.spritesheet || `${this.folderName}/images/items.png`,
  88. type: 'Reward Card',
  89. description: 'Reward: ' + pick.reward,
  90. noSalvage: true,
  91. sprite: pick.sprite || [0, 0],
  92. quantity: 1,
  93. quality: pick.quality || 1,
  94. setSize: pick.setSize
  95. };
  96. return card;
  97. },
  98. getReward: function (looter, set) {
  99. var configs = extend(true, {}, config);
  100. looter.instance.eventEmitter.emit('onBeforeGetCardsConfig', configs);
  101. var reward = configs[set].reward;
  102. var msg = {
  103. reward: reward,
  104. handler: this.rewards[reward]
  105. };
  106. looter.instance.eventEmitter.emit('onBeforeGetCardReward', msg);
  107. return msg.handler(looter);
  108. },
  109. rewards: {
  110. 'Level 10 Rune': function (obj) {
  111. return itemGenerator.generate({
  112. level: 10,
  113. spell: true
  114. });
  115. },
  116. 'Level 15 Legendary Weapon': function () {
  117. var slot = ['oneHanded', 'twoHanded'][~~(Math.random() * 2)];
  118. return itemGenerator.generate({
  119. level: 15,
  120. quality: 4,
  121. noSpell: true,
  122. slot: slot
  123. });
  124. },
  125. 'Perfect Level 10 Ring': function () {
  126. return itemGenerator.generate({
  127. level: 10,
  128. noSpell: true,
  129. //Always be at least magic
  130. bonusMagicFind: 286,
  131. perfection: 1,
  132. slot: 'finger'
  133. });
  134. },
  135. "Princess Morgawsa's Trident": function () {
  136. return itemGenerator.generate({
  137. name: `Princess Morgawsa's Trident`,
  138. level: [10, 15],
  139. quality: 4,
  140. noSpell: true,
  141. slot: 'twoHanded',
  142. sprite: [0, 0],
  143. spritesheet: '../../../images/legendaryItems.png',
  144. type: 'Trident',
  145. spellName: 'magic missile',
  146. description: `Summoned from the ancient depths of the ocean by the Benthic Incantation.`,
  147. stats: ['elementFrostPercent', 'elementFrostPercent', 'elementFrostPercent'],
  148. effects: [{
  149. type: 'freezeOnHit',
  150. rolls: {
  151. i_chance: [2, 5],
  152. i_duration: [2, 4]
  153. }
  154. }]
  155. });
  156. },
  157. "Five Random Idols": function () {
  158. var result = [];
  159. for (var i = 0; i < 5; i++) {
  160. result.push(itemGenerator.generate({
  161. currency: true
  162. }));
  163. }
  164. return result;
  165. },
  166. "Steelclaw's Bite": function () {
  167. return itemGenerator.generate({
  168. name: `Steelclaw's Bite`,
  169. level: [7, 10],
  170. quality: 4,
  171. noSpell: true,
  172. slot: 'mainHand',
  173. sprite: [1, 0],
  174. spritesheet: '../../../images/legendaryItems.png',
  175. type: 'Curved Dagger',
  176. spellName: 'double slash',
  177. description: `The blade seems to be made of some kind of bone and steel alloy.`,
  178. stats: ['dex', 'dex', 'addCritMultiplier', 'addCritMultiplier'],
  179. effects: [{
  180. type: 'damageSelf',
  181. rolls: {
  182. i_percentage: [8, 22]
  183. }
  184. }, {
  185. type: 'alwaysCrit',
  186. rolls: {}
  187. }]
  188. });
  189. }
  190. }
  191. };
  192. });