Раз уж вспомнили тут меня, вставлю 5 копеек ;)
Специально пересмотрел еще раз ту часть кода.
Увы, это не бага. Это такой расклад, как в картах. Поясню.
Нож - это отдельное слово, которое есть в названии предмета, что у игрока. Когда мы задаем "осм ножны", то идет поиск именно вхождения "ножны", что логично. Почему я назвал это расскладом ?
Потому, что игрок прежде взял и одел "ножны", а потом взял "нож".
Перебор в просмотре вещей идет с конца в начало.
Когда мы сказали "осм ножны", то слово нож(которое в нашем случае оказлось в начале) - мы отбросили, к тому же оно не подходит нам, а встретив сочетание "ножны" - оно нам подошло. Когда же был поиск "нож" - то именно охотничий нож был взят в руки потом, после ножен.
Проведем эксперимент. Выкинем оба предмета на землю. Потом в следующем порядке
взять нож
взять ножны
Скажем осм нож - нам должно выдать осмотр именно ножен.
Что можно предложить в принципе ?
Проверять в начале только предметы в инвентаре, потом только те, что одеты. В нашем примере это поможет только в том случае, если один предмет в инвентаре, другой - одет.
По поводу баги с "put all"
Конкретно ошибка в оригинальном коде Смауга файл act_obj.c line: 830
Там идут проверки флага нашли - не нашли, все или часть
Причем флаг нашли - истинна только если успешно предмет поклали в емкость.
Но, это к Морису, если все еще он сам с кодом играется ;)
Народ, а Вам от меня личное спасибо, для себя я эти баги чуток подправил ;)