frags 30 Опубликовано 19 Июля 2008 Нашел ошибку в логике в функции amk_offline_alife.on_inv_boxes_found: цикл "for a=1,table.getn(items[v_obj.id]) do" нужно заменить на цикл типа "while" c инкрементацией перменной цикла только если не вызывается функция pick_item в этом цикле. Проблема в том что функция pick_item удаляет элемент из массива items[v_obj.id] в результате чего код перебирает не все предметы в нычке. Т.е. цикл должен выглядеть так: Скрытый текст --Смотреть-- local a = 1 while a <= table.getn(items[v_obj.id]) do local v_itA = items[v_obj.id][a] if (v_itA) then local itA = alife():object(v_itA.id) if (itA and itA:name()==v_itA.name and itA.parent_id == v_obj.id) then --news_main.trace("on_inv_boxes_found - found "..itA:section_name().." in "..object:name()) -- Решим, подбираем или нет? local bTake = is_valuable(itA) if bTake then local l_objA = pick_item(victim, itA) a=a-1 end else if(itA) then local mm = itA.parent_id if mm == nil then mm = "nil" end amk.mylog("В контейнере "..object:name().." странная вещичка - "..itA:name().." parent_id="..mm) end end end a=a+1 end Поделиться этим сообщением Ссылка на сообщение