Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

88 lignes
1.6 KiB

  1. const isOnCooldown = (obj, cpnInv, item) => {
  2. if (item.cdMax) {
  3. if (item.cd) {
  4. process.send({
  5. method: 'events',
  6. data: {
  7. onGetAnnouncement: [{
  8. obj: {
  9. msg: 'That item is on cooldown'
  10. },
  11. to: [obj.serverId]
  12. }]
  13. }
  14. });
  15. return true;
  16. }
  17. item.cd = item.cdMax;
  18. //Find similar items and put them on cooldown too
  19. cpnInv.items.forEach(function (i) {
  20. if (i.name === item.name && i.cdMax === item.cdMax)
  21. i.cd = i.cdMax;
  22. });
  23. }
  24. };
  25. module.exports = async (cpnInv, itemId) => {
  26. let item = cpnInv.findItem(itemId);
  27. if (!item)
  28. return;
  29. let obj = cpnInv.obj;
  30. if (isOnCooldown(obj, cpnInv, item))
  31. return;
  32. let result = {
  33. ignore: false
  34. };
  35. obj.instance.eventEmitter.emit('onBeforeUseItem', obj, item, result);
  36. obj.fireEvent('onBeforeUseItem', item, result);
  37. if (result.ignore)
  38. return;
  39. let effects = (item.effects || []);
  40. let eLen = effects.length;
  41. for (let j = 0; j < eLen; j++) {
  42. let effect = effects[j];
  43. if (!effect.events)
  44. continue;
  45. let effectEvent = effect.events.onConsumeItem;
  46. if (!effectEvent)
  47. continue;
  48. let effectResult = {
  49. success: true,
  50. errorMessage: null
  51. };
  52. effectEvent.call(obj, effectResult, item, effect);
  53. if (!effectResult.success) {
  54. obj.social.notifySelf({ message: effectResult.errorMessage });
  55. return;
  56. }
  57. }
  58. if (item.type === 'consumable') {
  59. if (item.uses) {
  60. item.uses--;
  61. if (item.uses) {
  62. obj.syncer.setArray(true, 'inventory', 'getItems', item);
  63. return;
  64. }
  65. }
  66. cpnInv.destroyItem(itemId, 1);
  67. if (item.has('quickSlot'))
  68. cpnInv.obj.equipment.replaceQuickSlot(item);
  69. }
  70. };