Tuxuu 5 Опубликовано 24 Мая 2014 Я, конечно, заранее извиняюсь за кривокод (потому что Lua изучаю буквально на ходу), и программирование только хобби. Пытаюсь поправить функцию buy_quest_item, чтобы она помимо предметов и денег могла еще и произвольные инфопоршни выдавать. Вот кусок кода: if not ini:section_exist(buy_item) then local money = tonumber( buy_item ) if money then aem_manager.manage_money(money, "in") else news_manager.send_tip(db.actor, "Предмет \""..buy_item.."\" не найден.", nil, "nano", 30000) end elseif string.sub(buy_item,1,3)="ip_" then db.actor:give_info_portion(string.sub(buy_item,4,string.len(buy_item))) Суть в том, что если аргумент начинается с "ip_", то выдать инфопоршень равный аргументу за вычетом трех первых символов - "ip_".Проблема простая - что-то накосячил в этом участке и не могу понять, что. Что же я мог упустить? С возвращеньем меня. Поделиться этим сообщением Ссылка на сообщение
Tuxuu 5 Опубликовано 24 Мая 2014 (изменено) @Dennis_Chikin, function buy_quest_item() local f = getFS() local flist = f:file_list_open_ex("$game_saves$", bit_or(FS.FS_ListFiles, FS.FS_RootOnly), "*.buy") if flist:Size() == 0 then return end fname = flist:GetAt(0):NameFull() local buy_item = string.sub(fname, 0, string.len(fname)-4) local ini = system_ini() if string.sub(buy_item, 0, 2) = "ip_" then db.actor:give_info_portion(string.sub(buy_item,3,string.len(buy_item))) end return if not ini:section_exist(buy_item) then local money = tonumber( buy_item ) if money then aem_manager.manage_money(money, "in") else news_manager.send_tip(db.actor, "Предмет \""..buy_item.."\" не найден.", nil, "nano", 30000) end return -- elseif db.actor:money() < 5 then news_manager.send_tip(db.actor, "Для покупки недостаточно денег.", nil, "nano", 30000) --elseif is_excluded_item(buy_item) then --news_manager.send_tip(db.actor, "Через меню игры можно покупать только квестовые предметы.", nil, "nano", 30000) else db.actor:disable_info_portion("mm_opt") aem_manager.manage_money(5, "out") sak.create_items_actor(buy_item, 1) local info for i =1,3 do info = "acv_halavshic"..tostring(i) if not has_alife_info(info) then db.actor:give_info_portion(info) break end end end local f1 = f:update_path("$game_saves$", fname) f:file_delete(f1) end Хммм... Вот текст всей функции. Переделал, но, похоже, опять что-то не то сделал. Мой участок - строки 9-12. Может, у меня синтаксис неправильный? Вроде if закрыл, return сделал. Изменено 24 Мая 2014 пользователем BFG С возвращеньем меня. Поделиться этим сообщением Ссылка на сообщение