Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

50 linhas
1.1 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 id = haveMaterial ? haveMaterial.id : null;
  23. const haveQuantity = haveMaterial ? (haveMaterial.quantity || 1) : 0;
  24. const needQuantity = quantity;
  25. const noHaveEnough = haveQuantity < needQuantity;
  26. const material = {
  27. id,
  28. name,
  29. nameLike,
  30. haveQuantity,
  31. needQuantity,
  32. noHaveEnough
  33. };
  34. return material;
  35. });
  36. return result;
  37. };