25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

58 satır
1.2 KiB

  1. const buildPickedItems = require('./buildPickedItems');
  2. module.exports = (crafter, recipe, msg) => {
  3. const { inventory: { items } } = crafter;
  4. const { materialGenerator, materials, needItems = [] } = recipe;
  5. const { pickedItemIds = [] } = msg;
  6. const pickedItems = buildPickedItems(crafter, recipe, msg);
  7. const allPickedItemsSet = (
  8. pickedItemIds.length === needItems.length &&
  9. !pickedItems.some(i => !i)
  10. );
  11. if (!allPickedItemsSet)
  12. return [];
  13. let useMaterials = materials;
  14. if (materialGenerator)
  15. useMaterials = materialGenerator(crafter, pickedItems);
  16. const result = useMaterials.map(m => {
  17. const { name, nameLike, quantity } = m;
  18. const haveMaterial = items.find(i => (
  19. i.name === name ||
  20. i.name.includes(nameLike)
  21. ));
  22. const noHaveEnough = (
  23. haveMaterial &&
  24. (
  25. haveMaterial.quantity === 1 ||
  26. haveMaterial.quantity < quantity
  27. )
  28. );
  29. const id = haveMaterial ? haveMaterial.id : null;
  30. const haveQuantity = haveMaterial ? (haveMaterial.quantity || 1) : 0;
  31. const needQuantity = quantity;
  32. const material = {
  33. id,
  34. name,
  35. nameLike,
  36. haveQuantity,
  37. needQuantity,
  38. noHaveEnough
  39. };
  40. return material;
  41. });
  42. return result;
  43. };