Uyman358, казус вероятно заключается в том, что не работает, правильно? Работать оно не будет по той простой причине, что функция predmety_yazhik_complete у тебя принимает всего два параметра, а ты в неё передаёшь аж семнадцать! Здесь либо функцию изменять, либо вызов функции делать по другому.
azrael1325, это не ошибка. Ничто не мешает мне одну функцию писать внутри другой, к тому же в случае Uyman358 это не его похотелка/ошибка - это необходимость! Дело в том, что функция actor:iterate_inventory принимает в качестве своего первого аргумента другую функцию, в которую автоматически передаются все предметы из инвентаря, естественно в по ходу перебора, а не все скопом.
local a = db.actor:object("ПРЕДМЕТ1") лocal b = db.actor:object("ПРЕДМЕТ2") function *() if a ~= nil and b ~= nil then db:give_info_portion("ПОРШЕНЬ") return true end return false end
Uyman358, для проверки нескольких секции через одну функцию можешь использовать вот такую функцию:
Code
--# Функция принимает в качестве аргумента таблицу вида: --# {"section_name", count, "section_name", count, ...} function predmety_yazhik_complete (p) local actor = db.actor --# Есть ли актор? (риторический вопрос) if actor then --# Разобъём аргумент (таблицу) на пары, где twain - это секция предмета, который проверяем, а twain+1 - его количество. for twain = 1, #p, 2 do --# Для каждой пары секция - количество заведём один счётчик, который будет считать количесвто предметов в инвенторе. local cnt = 0 --# Перебираем инвентарь ГГ. actor:iterate_inventory( function (dummy, item) --# Если секция совпала, то увеличим сумму. if item:section() == p[twain] then cnt = cnt + 1 end end ,nil) --# Если общая сумма указанного предмета меньше нужной, т.е. не хватает, то заканчиваем счёт и возвращаем соответствующее значение. if cnt < p[twain+1] then return false end end --# Если все предметы есть в указанном количестве - вернём true. return true end --# Если актора не существует вернём false. return false end
Вызывать так же, только все секции нужно писать в таблице и количество указывать явно:
Code
function predmety_yazhik_complete1() return give_have_out_in.predmety_yazhik_complete({"bread",8,"kolbasa",6,"conserva",10,"medkit",3,"energy_drink",4,"vodka",10,"medkit_army",1,"antir ad" ,2,"bandage",7}) end
Добавлено (01.10.2012, 16:50) --------------------------------------------- Либо использую свою функцию predmety_yazhik_complete, но тогда вызов делай вот так:
Code
function predmety_yazhik_complete1() tbl = {"bread",8,"kolbasa",6,"conserva",10,"medkit",3,"energy_drink",4,"vodka",10,"medkit_army",1,"antirad" ,2,"bandage",7} for twain = 1, #tbl, 2 do if not predmety_yazhik_complete (tbl[twain], tbl[twain+1]) then return false end end return true end
Оба варианта будут работать одинаково, но первый более универсален - будет работать и для одной секции и для любого их количества.
Народ, я конечно понимаю что достал вас своими глупыми вопросами насчет сдк но, кода я добовляю спав елемент "делаю все по уроку не надо гнать", он добовляется, но когда выбираю для него модельку, так модельки освещения в ogf чо за бред? wtf???