Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

Всем привет, объясню суть проблемы. Создаю новый предмет - копирую сецию премета напр. 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")) не срабатывает. В чём может быть проблема?
Зараннее спасибо.
Изменено пользователем pc-2

Поделиться этим сообщением


Ссылка на сообщение

@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 не съедается. Вот как то так.
Изменено пользователем HellRatz

Поделиться этим сообщением


Ссылка на сообщение

 

 

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::Eat
File : E:\stalker\sources\trunk\xr_3da\xrGame\Inventory.cpp
Line : 892
Description : pIItem->m_pCurrentInventory==this

 

Поделиться этим сообщением


Ссылка на сообщение

 

 

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)
Добавил эту функцию, получился такой вот вид

Поделиться этим сообщением


Ссылка на сообщение

@Kondr48, Ну да логично, если это убрать, то объект kurevo появляется в рюкзаке, а ГГ продолжает курить до конца анимации, потом

Expression : assertion failed

Function : xrServer::Process_event_reject
File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line : 12
Description : e_parent && e_entity

 

Дааа, Бином Ньютона!!!!

Изменено пользователем pc-2

Поделиться этим сообщением


Ссылка на сообщение

@Kondr48, Кое, что поменял, ну всё равно результат тод же. Эта функция  db.actor:eat(db.actor:object("kurevo")) не работает.

Поделиться этим сообщением


Ссылка на сообщение

@Kondr48, Спасибо большое за совет, вот эту функцию

function item_update()

local item = db.actor:active_item()
if not (item and item:section() == "sigaret") then
if snd_obj and snd_obj:playing() then
snd_obj:stop()
end
return
end

 

 я привел к такому виду

 

function item_update()']function item_update()

local item = db.actor:active_item()
if not (item and item:section() == "sigaret") then
if snd_obj and snd_obj:playing() then
snd_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"))
end
return
end


 

 и всё заработало!!!

  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...