local on_take_t, on_take_any, on_take_n = {}, {}, 0
function add_on_take( f, sect ) -- ( функция, nil ) - для любых секций, либо ( f, секция )
if sect then
local t = on_take_t[sect]
if t then table_insert( t, f )
else on_take_t[sect] = { f }
end
else on_take_n = on_take_n + 1; on_take_any[on_take_n] = f
end
end
function actor_binder:on_item_take( item )
-- log( "info", "on_item_take" )
ltasks_proceed()
for i = 1, on_take_n do on_take_any[i]( item ) end
local t = on_take_t[item:section()]
if t then
for i = 1, #t do t[i]( item ) end
end
if level.map_has_object_spot( item:id(), "red_location" ) ~= 0 then
level.map_remove_object_spot( item:id(), "red_location" )
end
-- log( "info", "on_item_take, done" )
end
- здесь речь идет о замене простыни в 100500 if ... then ...
Комментарий:
"А толку, если такая таблица актуальна только при старте игры по сути? Тогда уж на дропе убирай из таблицы выкинутую вещь. Впрочем, чем не нравится получение предмета через actor:object(section) (или через ту же итерацию по инвентарю) - я не знаю."
Вот как знал, написав в начале темы: "все равно это читать ни кто не будет, так хоть душу отведу."