| 319 | } |
| 320 | |
| 321 | std::optional<ClothingRequirement> setItemFromName(string name) |
| 322 | { |
| 323 | auto SEARCH_ITEM_RAWS = [&name]<typename FT>(FT df::itemdef_handlerst:: * rawType, df::job_type job, df::item_type item) -> std::optional<ClothingRequirement> |
| 324 | { |
| 325 | auto& itemdefs = world->raws.itemdefs.*rawType; |
| 326 | auto it = std::find_if(itemdefs.begin(), itemdefs.end(), [&name] (auto& itemdef) { |
| 327 | string fullName = itemdef->adjective.empty() ? itemdef->name : itemdef->adjective + " " + itemdef->name; |
| 328 | return fullName == name; |
| 329 | }); |
| 330 | if (it != itemdefs.end()) |
| 331 | { |
| 332 | auto& itemdef = *it; |
| 333 | return ClothingRequirement{.jobType = job, .itemType = item, .item_subtype = itemdef->subtype}; |
| 334 | } |
| 335 | return std::nullopt; |
| 336 | }; |
| 337 | |
| 338 | if (auto v = SEARCH_ITEM_RAWS(&df::itemdef_handlerst::armor, df::job_type::MakeArmor, df::item_type::ARMOR)) |
| 339 | return v; |
| 340 | if (auto v = SEARCH_ITEM_RAWS(&df::itemdef_handlerst::gloves, df::job_type::MakeGloves, df::item_type::GLOVES)) |
| 341 | return v; |
| 342 | if (auto v = SEARCH_ITEM_RAWS(&df::itemdef_handlerst::shoes, df::job_type::MakeShoes, df::item_type::SHOES)) |
| 343 | return v; |
| 344 | if (auto v = SEARCH_ITEM_RAWS(&df::itemdef_handlerst::helms, df::job_type::MakeHelm, df::item_type::HELM)) |
| 345 | return v; |
| 346 | if (auto v = SEARCH_ITEM_RAWS(&df::itemdef_handlerst::pants, df::job_type::MakePants, df::item_type::PANTS)) |
| 347 | return v; |
| 348 | return std::nullopt; |
| 349 | } |
| 350 | |
| 351 | static std::optional<ClothingRequirement> setItemFromToken(string token) { |
| 352 | ItemTypeInfo itemInfo; |