Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

245 řádky
5.6 KiB

  1. define([
  2. ], function(
  3. ) {
  4. return {
  5. type: 'equipment',
  6. eq: {},
  7. doAutoEq: true,
  8. init: function(blueprint) {
  9. },
  10. transfer: function() {
  11. if (this.eqTransfer) {
  12. this.eq = this.eqTransfer;
  13. delete this.eqTransfer;
  14. }
  15. },
  16. simplify: function(self) {
  17. return {
  18. type: 'equipment',
  19. eq: {},
  20. eqTransfer: this.eq
  21. };
  22. },
  23. autoEquip: function(itemId) {
  24. if (!this.doAutoEq)
  25. return;
  26. var item = this.obj.inventory.findItem(itemId);
  27. if (!item)
  28. return;
  29. else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (item.level > this.obj.stats.values.level)) {
  30. item.eq = false;
  31. return;
  32. } else if ((item.factions) && (this.obj.player)) {
  33. if (!this.obj.reputation.canEquipItem(item)) {
  34. item.eq = false;
  35. return;
  36. }
  37. }
  38. var currentEqId = this.eq[item.slot];
  39. if (currentEqId == null) {
  40. this.equip(itemId);
  41. return true;
  42. }
  43. },
  44. equip: function(itemId) {
  45. var item = this.obj.inventory.findItem(itemId);
  46. if (!item)
  47. return;
  48. else if ((!item.slot) || (item.material) || (item.quest) || (item.ability) || (item.level > this.obj.stats.values.level)) {
  49. item.eq = false;
  50. return;
  51. } else if ((item.factions) && (this.obj.player)) {
  52. if (!this.obj.reputation.canEquipItem(item)) {
  53. item.eq = false;
  54. return;
  55. }
  56. }
  57. var equipMsg = {
  58. success: true,
  59. item: item
  60. };
  61. this.obj.fireEvent('beforeEquipItem', equipMsg);
  62. if (!equipMsg.success) {
  63. this.obj.instance.syncer.queue('onGetMessages', {
  64. id: this.obj.id,
  65. messages: [{
  66. class: 'q0',
  67. message: equipMsg.msg || 'you cannot equip that item',
  68. type: 'info'
  69. }]
  70. }, [this.obj.serverId]);
  71. return;
  72. }
  73. delete item.pos;
  74. this.obj.syncer.setArray(true, 'inventory', 'getItems', item);
  75. var spellId = null;
  76. var currentEqId = this.eq[item.slot];
  77. var currentEq = this.obj.inventory.findItem(currentEqId);
  78. if (currentEq == item)
  79. return;
  80. if (currentEqId != null) {
  81. spellId = currentEq.spellId;
  82. this.unequip(currentEqId);
  83. }
  84. var stats = item.stats;
  85. for (var s in stats) {
  86. var val = stats[s];
  87. if (s == 'hpMax')
  88. s = 'vit';
  89. this.obj.stats.addStat(s, val);
  90. }
  91. item.eq = true;
  92. this.eq[item.slot] = itemId;
  93. this.obj.spellbook.calcDps();
  94. if ((!this.obj.mob) || (item.ability)) {
  95. if (item.spell)
  96. this.obj.inventory.learnAbility(itemId, item.runeSlot);
  97. else {
  98. var result = item;
  99. if (item.effects) {
  100. result = extend(true, {}, item);
  101. result.effects = result.effects.map(e => ({factionId: e.factionId, text: e.text, properties: e.properties }));
  102. var reputation = this.obj.reputation;
  103. if (result.factions) {
  104. result.factions = result.factions.map(function(f) {
  105. var faction = reputation.getBlueprint(f.id);
  106. var factionTier = reputation.getTier(f.id);
  107. var noEquip = null;
  108. if (factionTier < f.tier)
  109. noEquip = true;
  110. return {
  111. name: faction.name,
  112. tier: f.tier,
  113. tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier],
  114. noEquip: noEquip
  115. };
  116. }, this);
  117. }
  118. }
  119. this.obj.syncer.setArray(true, 'inventory', 'getItems', result);
  120. }
  121. }
  122. this.obj.fireEvent('afterEquipItem', item);
  123. },
  124. unequip: function(itemId) {
  125. var item = itemId;
  126. if (item.id == null)
  127. item = this.obj.inventory.findItem(itemId);
  128. if (!item)
  129. return;
  130. var stats = item.stats;
  131. for (var s in stats) {
  132. var val = stats[s];
  133. if (s == 'hpMax')
  134. s = 'vit';
  135. this.obj.stats.addStat(s, -val);
  136. }
  137. delete item.eq;
  138. delete this.eq[item.slot];
  139. if (item.spell) {
  140. item.eq = true;
  141. this.obj.inventory.unlearnAbility(itemId, item.runeSlot);
  142. } else {
  143. if (!item.effects)
  144. this.obj.syncer.setArray(true, 'inventory', 'getItems', item);
  145. else {
  146. var result = extend(true, {}, item);
  147. result.effects = result.effects.map(e => ({factionId: e.factionId, text: e.text, properties: e.properties }));
  148. var reputation = this.obj.reputation;
  149. if (result.factions) {
  150. result.factions = result.factions.map(function(f) {
  151. var faction = reputation.getBlueprint(f.id);
  152. var factionTier = reputation.getTier(f.id);
  153. var noEquip = null;
  154. if (factionTier < f.tier)
  155. noEquip = true;
  156. return {
  157. name: faction.name,
  158. tier: f.tier,
  159. tierName: ['Hated', 'Hostile', 'Unfriendly', 'Neutral', 'Friendly', 'Honored', 'Revered', 'Exalted'][f.tier],
  160. noEquip: noEquip
  161. };
  162. }, this);
  163. }
  164. this.obj.syncer.setArray(true, 'inventory', 'getItems', result);
  165. }
  166. }
  167. this.obj.spellbook.calcDps();
  168. this.obj.fireEvent('afterUnequipItem', item);
  169. },
  170. unequipAll: function() {
  171. var eq = this.eq;
  172. Object.keys(this.eq).forEach(function(slot) {
  173. this.unequip(eq[slot]);
  174. }, this);
  175. },
  176. unequipFactionGear: function(factionId, tier) {
  177. var inventory = this.obj.inventory;
  178. var eq = this.eq;
  179. Object.keys(this.eq).forEach(function(slot) {
  180. var itemId = eq[slot];
  181. var item = inventory.findItem(itemId);
  182. var factions = item.factions;
  183. if (!factions)
  184. return;
  185. var findFaction = factions.find(f => f.id == factionId);
  186. if (!findFaction)
  187. return;
  188. if (findFaction.tier > tier) {
  189. this.unequip(itemId);
  190. this.obj.instance.syncer.queue('onGetMessages', {
  191. id: this.obj.id,
  192. messages: [{
  193. class: 'q4',
  194. message: 'you unequip your ' + item.name + ' as it zaps you',
  195. type: 'rep'
  196. }]
  197. }, [this.obj.serverId]);
  198. }
  199. }, this);
  200. }
  201. };
  202. });