選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

356 行
7.2 KiB

  1. define([
  2. './statsFishingRod'
  3. ], function (
  4. statsFishingRod
  5. ) {
  6. return {
  7. generators: {
  8. hpMax: function (item, level, blueprint, perfection) {
  9. var max = ((level * 15) + level) / 10;
  10. if (perfection == null)
  11. return random.norm(1, max) * (blueprint.statMult.hpMax || 1);
  12. else
  13. return max * perfection * (blueprint.statMult.hpMax || 1);
  14. },
  15. mainStat: function (item, level, blueprint, perfection) {
  16. var min = ((level * 6.05) - ((level - 1) * 1.2)) / 10;
  17. var max = ((level * 14.9) + ((level - 1) * 31.49)) / 10;
  18. if (perfection == null)
  19. return random.norm(min, max) * (blueprint.statMult.mainStat || 1);
  20. else
  21. return (min + ((max - min) * perfection)) * (blueprint.statMult.mainStat || 1);
  22. },
  23. armor: function (item, level, blueprint, perfection) {
  24. var min = (level * 20);
  25. var max = (level * 51.2);
  26. if (perfection == null)
  27. return random.norm(min, max) * blueprint.statMult.armor;
  28. else
  29. return (min + ((max - min) * perfection)) * (blueprint.statMult.armor || 1);
  30. },
  31. elementResist: function (item, level, blueprint, perfection) {
  32. if (perfection == null)
  33. return random.norm(1, 7.5) * (blueprint.statMult.elementResist || 1);
  34. else
  35. return (1 + (6.5 * perfection)) * (blueprint.statMult.elementResist || 1);
  36. },
  37. regenHp: function (item, level, blueprint, perfection) {
  38. var max = (((10 + (level * 200)) / 20) / 2) / 10;
  39. if (perfection == null)
  40. return random.norm(1, max) * (blueprint.statMult.regenHp || 1);
  41. else
  42. return max * perfection * (blueprint.statMult.regenHp || 1);
  43. },
  44. lvlRequire: function (item, level, blueprint, perfection) {
  45. var max = ~~(level / 2);
  46. if (perfection == null)
  47. return random.norm(1, max) * (blueprint.statMult.lvlRequire || 1);
  48. else
  49. return max * perfection * (blueprint.statMult.lvlRequire || 1);
  50. }
  51. },
  52. stats: {
  53. hpMax: {
  54. generator: 'hpMax'
  55. },
  56. regenHp: {
  57. generator: 'regenHp'
  58. },
  59. manaMax: {
  60. min: 1,
  61. max: 5
  62. },
  63. regenMana: {
  64. min: 1,
  65. max: 7
  66. },
  67. lvlRequire: {
  68. generator: 'lvlRequire'
  69. },
  70. str: {
  71. generator: 'mainStat'
  72. },
  73. int: {
  74. generator: 'mainStat'
  75. },
  76. dex: {
  77. generator: 'mainStat'
  78. },
  79. elementArcaneResist: {
  80. generator: 'elementResist'
  81. },
  82. elementFrostResist: {
  83. generator: 'elementResist'
  84. },
  85. elementFireResist: {
  86. generator: 'elementResist'
  87. },
  88. elementHolyResist: {
  89. generator: 'elementResist'
  90. },
  91. elementPhysicalResist: {
  92. generator: 'elementResist'
  93. },
  94. elementPoisonResist: {
  95. generator: 'elementResist'
  96. },
  97. elementAllResist: {
  98. generator: 'elementResist'
  99. },
  100. dmgPercent: {
  101. min: 1,
  102. max: 5,
  103. ignore: true
  104. },
  105. elementArcanePercent: {
  106. min: 1,
  107. max: 5,
  108. ignore: true
  109. },
  110. elementFrostPercent: {
  111. min: 1,
  112. max: 5,
  113. ignore: true
  114. },
  115. elementFirePercent: {
  116. min: 1,
  117. max: 5,
  118. ignore: true
  119. },
  120. elementHolyPercent: {
  121. min: 1,
  122. max: 5,
  123. ignore: true
  124. },
  125. elementPhysicalPercent: {
  126. min: 1,
  127. max: 5,
  128. ignore: true
  129. },
  130. elementPoisonPercent: {
  131. min: 1,
  132. max: 5,
  133. ignore: true
  134. },
  135. allAttributes: {
  136. generator: 'mainStat',
  137. ignore: true
  138. },
  139. armor: {
  140. generator: 'armor',
  141. ignore: true
  142. },
  143. addCritChance: {
  144. min: 1,
  145. max: 90
  146. },
  147. addCritMultiplier: {
  148. min: 5,
  149. max: 50
  150. },
  151. magicFind: {
  152. min: 1,
  153. max: 15
  154. },
  155. xpIncrease: {
  156. min: 1,
  157. max: 6
  158. }
  159. },
  160. slots: {
  161. feet: {
  162. sprintChance: {
  163. min: 1,
  164. max: 20
  165. }
  166. },
  167. finger: {
  168. dmgPercent: {
  169. min: 1,
  170. max: 5
  171. },
  172. elementArcanePercent: {
  173. min: 1,
  174. max: 5
  175. },
  176. elementFrostPercent: {
  177. min: 1,
  178. max: 5
  179. },
  180. elementFirePercent: {
  181. min: 1,
  182. max: 5
  183. },
  184. elementHolyPercent: {
  185. min: 1,
  186. max: 5
  187. },
  188. elementPhysicalPercent: {
  189. min: 1,
  190. max: 5
  191. },
  192. elementPoisonPercent: {
  193. min: 1,
  194. max: 5
  195. },
  196. allAttributes: {
  197. generator: 'mainStat'
  198. }
  199. },
  200. neck: {
  201. dmgPercent: {
  202. min: 1,
  203. max: 10
  204. },
  205. elementArcanePercent: {
  206. min: 1,
  207. max: 10
  208. },
  209. elementFrostPercent: {
  210. min: 1,
  211. max: 10
  212. },
  213. elementFirePercent: {
  214. min: 1,
  215. max: 10
  216. },
  217. elementHolyPercent: {
  218. min: 1,
  219. max: 10
  220. },
  221. elementPhysicalPercent: {
  222. min: 1,
  223. max: 10
  224. },
  225. elementPoisonPercent: {
  226. min: 1,
  227. max: 10
  228. },
  229. allAttributes: {
  230. generator: 'mainStat'
  231. }
  232. }
  233. },
  234. mainStatChance: 0.7,
  235. generate: function (item, blueprint, result) {
  236. if (item.slot == 'tool') {
  237. statsFishingRod.generate(item, blueprint, result);
  238. return;
  239. }
  240. if (!blueprint.statCount)
  241. item.stats = {};
  242. if (blueprint.noStats)
  243. return;
  244. //If we enchant something we don't add armor
  245. if (!blueprint.statMult)
  246. blueprint.statMult = {};
  247. if (blueprint.statMult.armor)
  248. this.buildStat(item, blueprint, 'armor');
  249. var statCount = blueprint.statCount || (item.quality + 1);
  250. if (blueprint.forceStats) {
  251. for (var i = 0; i < Math.min(statCount, blueprint.forceStats.length); i++) {
  252. var choice = blueprint.forceStats[i];
  253. this.buildStat(item, blueprint, choice, result);
  254. statCount--;
  255. }
  256. }
  257. if (blueprint.stats) {
  258. var useStats = extend(true, [], blueprint.stats);
  259. var addStats = Math.min(statCount, blueprint.stats.length);
  260. for (var i = 0; i < addStats; i++) {
  261. var choice = useStats[~~(Math.random() * useStats.length)];
  262. useStats.spliceFirstWhere(s => s == choice);
  263. this.buildStat(item, blueprint, choice, result);
  264. statCount--;
  265. }
  266. }
  267. for (var i = 0; i < statCount; i++) {
  268. this.buildStat(item, blueprint, null, result);
  269. }
  270. for (var s in item.stats) {
  271. item.stats[s] = Math.ceil(item.stats[s]);
  272. if (item.stats[s] == 0)
  273. delete item.stats[s];
  274. }
  275. },
  276. buildStat: function (item, blueprint, stat, result) {
  277. var statOptions = extend(true, {}, this.stats, this.slots[item.slot] || {});
  278. var statBlueprint = null;
  279. if (!stat) {
  280. var options = Object.keys(statOptions).filter(s => !statOptions[s].ignore);
  281. stat = options[~~(Math.random() * options.length)];
  282. statBlueprint = statOptions[stat];
  283. } else
  284. statBlueprint = statOptions[stat];
  285. var value = null;
  286. if (statBlueprint.generator) {
  287. var level = item.originalLevel || item.level;
  288. value = Math.ceil(this.generators[statBlueprint.generator](item, level, blueprint, blueprint.perfection));
  289. } else if (!blueprint.perfection)
  290. value = Math.ceil(random.norm(statBlueprint.min, statBlueprint.max));
  291. else
  292. value = statBlueprint.min + ((statBlueprint.max - statBlueprint.min) * blueprint.perfection);
  293. if ((result) && (result.addStatMsgs)) {
  294. result.addStatMsgs.push({
  295. stat: stat,
  296. value: value
  297. });
  298. if (!item.enchantedStats)
  299. item.enchantedStats = {};
  300. if (item.enchantedStats[stat])
  301. item.enchantedStats[stat] += value;
  302. else
  303. item.enchantedStats[stat] = value;
  304. }
  305. if (stat == 'lvlRequire') {
  306. if (!item.originalLevel)
  307. item.originalLevel = item.level;
  308. item.level -= value;
  309. if (item.level < 1)
  310. item.level = 1;
  311. }
  312. if (item.stats[stat])
  313. value += item.stats[stat];
  314. item.stats[stat] = value;
  315. }
  316. };
  317. });