pc-2 139 Опубликовано 13 Февраля 2017 (изменено) Всем привет, объясню суть проблемы. Создаю новый предмет - копирую сецию премета напр. konserva, меняю название на kurevo затем добовляю функцию в скрипт. Выглядит так function del_kurevo() local oitem = db.actor:item_in_slot(1) if oitem then db.actor:drop_item(oitem) alife():release(alife():object(oitem:id()), true) alife():create("kurevo", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) db.actor:object("kurevo") db.actor:eat(db.actor:object("kurevo")) news_manager.send_tip(db.actor, "покурил, теперь за дело!", 0, "actor", 5000) end end Функция работает, сообщение приходит, предмет kurevo появляется в рюкзаке, но не используется, функция db.actor:eat(db.actor:object("kurevo")) не срабатывает. В чём может быть проблема? Зараннее спасибо. Изменено 13 Февраля 2017 пользователем pc-2 Поделиться этим сообщением Ссылка на сообщение
pc-2 139 Опубликовано 14 Февраля 2017 (изменено) @dsh, Я сделал как вы написали получилась вот такая функция: function del_kurevo() local oitem = db.actor:item_in_slot(1) if oitem then db.actor:drop_item(oitem) alife():release(alife():object(oitem:id()), true) alife():create("kurevo", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) level.client_spawn_manager():add(sobj.id, -1, function( id, obj )db.actor:eat( obj )end) db.actor:object("kurevo") db.actor:eat(db.actor:object("kurevo")) news_manager.send_tip(db.actor, "покурил, теперь за дело!", 0, "actor", 5000) end end получил вот такой вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...iles (x86)\op 2.1\gamedata\scripts\xr_smoking.script:82: attempt to index global 'sobj' (a nil value) А, вот так всё работает! function del_kurevo() local oitem = db.actor:item_in_slot(1) if oitem then db.actor:drop_item(oitem) alife():release(alife():object(oitem:id()), true) --alife():create("kurevo", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) alife():create("conserva", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) --db.actor:object("kurevo") db.actor:object("conserva") --db.actor:eat(db.actor:object("kurevo")) db.actor:eat(db.actor:object("conserva")) news_manager.send_tip(db.actor, "покурил, теперь за дело!", 0, "actor", 5000) и даже чавкает. Проблема скорее всего в созданном объекте "kurevo"- игра не знает как его использовать ( съесть, выпить, использовать ). Ну в этом я конечно не уверен, а, есть ли такая таблица распределения. А что-бы вам более понятно было, я адаптировал из мода Альтернатива -анимацию курение (ну это просто моё хобби чё-то перетащить с одного мода в другой) в ОП-2, ну так как курить это просто время терять, а, в скриптах я вообще полный 0. Но я захотел что-бы курение защищало немного от псивоздействия и чуть чуть утоляло голод. Я решил создать 2 объекта Один как Антизомбин, но с меньшей защитой и второй наподобие батончика и после курения он как - бы всё съедал и тогда уходило-бы часть псивоздействия и голод, и как-бы от курения. Но объект kurevo не съедается. Вот как то так. Изменено 14 Февраля 2017 пользователем HellRatz Поделиться этим сообщением Ссылка на сообщение
pc-2 139 Опубликовано 15 Февраля 2017 local sobj = alife():create("kurevo", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) level.client_spawn_manager():add(sobj.id, -1, function(id, obj) db.actor:eat(obj) end) Сделал как ты сказал Expression : assertion failed Function : CInventory::EatFile : E:\stalker\sources\trunk\xr_3da\xrGame\Inventory.cppLine : 892Description : pIItem->m_pCurrentInventory==this Поделиться этим сообщением Ссылка на сообщение
pc-2 139 Опубликовано 15 Февраля 2017 local sobj = alife():create("kurevo", vector(), 0, 0, db.actor:id()) level.client_spawn_manager():add(sobj.id, 0, function(id, obj) db.actor:eat(db.actor:object("kurevo")) end) Добавил эту функцию, получился такой вот вид Поделиться этим сообщением Ссылка на сообщение
pc-2 139 Опубликовано 15 Февраля 2017 (изменено) @Kondr48, Ну да логично, если это убрать, то объект kurevo появляется в рюкзаке, а ГГ продолжает курить до конца анимации, потом Expression : assertion failed Function : xrServer::Process_event_rejectFile : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cppLine : 12Description : e_parent && e_entity Дааа, Бином Ньютона!!!! Изменено 15 Февраля 2017 пользователем pc-2 Поделиться этим сообщением Ссылка на сообщение
pc-2 139 Опубликовано 15 Февраля 2017 @Kondr48, Кое, что поменял, ну всё равно результат тод же. Эта функция db.actor:eat(db.actor:object("kurevo")) не работает. Поделиться этим сообщением Ссылка на сообщение
pc-2 139 Опубликовано 16 Февраля 2017 @Kondr48, Спасибо большое за совет, вот эту функцию function item_update() local item = db.actor:active_item()if not (item and item:section() == "sigaret") thenif snd_obj and snd_obj:playing() thensnd_obj:stop()endreturnend я привел к такому виду function item_update()']function item_update() local item = db.actor:active_item()if not (item and item:section() == "sigaret") thenif snd_obj and snd_obj:playing() thensnd_obj:stop()alife():create("kurevo", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())db.actor:eat(db.actor:object("kurevo"))endreturnend и всё заработало!!! 1 Поделиться этим сообщением Ссылка на сообщение