в class_registrator.script
Код
cs_register(object_factory, "CNewObjectTest", "se_item.se_newobj", ("E_NEWOBJ"), "new_obj_s")
в se_item.script
Код
class "se_newobj" (cse_alife_item_custom_newobj)
function se_newobj:__init(section) super(section)
end
..... далее все как у других классов
в bind_newobj.script
Код
function init(obj)
local new_binder = newobj_binder(obj)
obj:bind_object(new_binder)
end
class "newobj_binder" (object_binder)
function newobj_binder:__init(obj) super(obj)
......
end
..... далее все как у других классов
в конфиге предмета:
Код
[newobj_base]
GroupControlSection = spawn_group
discovery_dependency =
class = E_NEWOBJ
cform = skeleton
full_icon_name = npc_icon_newobj
slot = 11
script_binding = bind_newobj.init
additional_inventory_weight = 0
additional_inventory_weight2 = 0
;----------------------------
[newobj_test1]:newobj_base
.... далее все как обычно
Теперь движок:
файл xrGame\object_factory_register.cpp
Код
# include "NewObjectTest.h"
....
ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, CLSID_E_NEWOBJ, "new_obj");
....
ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, TEXT2CLSID("E_NEWOBJ"), "new_obj_s");
файл xrGame\clsid_game.h
Код
#define CLSID_E_NEWOBJ MK_CLSID('E','Q','_','N','E','W','O','B')
файл xrGame\xrServer_Objects_ALife_Items.h
Код
SERVER_ENTITY_DECLARE_BEGIN( CSE_ALifeItemNewObjectTest, CSE_ALifeItem)
u32 m_ef_equipment_type;
CSE_ALifeItemNewObjectTest(LPCSTR caSection);
virtual ~ CSE_ALifeItemNewObjectTest();
virtual u32 ef_equipment_type() const;
virtual BOOL Net_Relevant();
SERVER_ENTITY_DECLARE_END
add_to_type_list( CSE_ALifeItemNewObjectTest)
#define script_type_list save_type_list( CSE_ALifeItemNewObjectTest)
файл xrGame\xrServer_Objects_ALife_Items.cpp
Код
CSE_ALifeItemNewObjectTest::CSE_ALifeItemNewObjectTest(LPCSTR caSection) : CSE_ALifeItem(caSection)
{
m_ef_equipment_type = pSettings->r_u32(caSection, "ef_equipment_type");
}
CSE_ALifeItemNewObjectTest::~CSE_ALifeItemNewObjectTest()
{
}
.... далее все как у других классов
файл xrGame\xrServer_Objects_ALife_Items_script2.cpp
Код
void CSE_ALifeItemNewObjectTest::script_register(lua_State *L)
{
module(L)[
luabind_class_item1(
CSE_ALifeItemNewObjectTest,
"cse_alife_item_custom_newobj",
CSE_ALifeItem
)
];
}
далее уже класс CNewObjectTest, но его весь приводить не буду, много там тексту - содран с класса броников, что не нужно убрано, оставлено пока основное.
Для теста добавлял вывод сообщения в лог в конструкторы CSE_ALifeItemNewObjectTest и CNewObjectTest, и соответственно в такие-же классы броников. При создании объекта(спавн в инв. ГГ) - в логе сообщения из классов броников, а из нового класса нет. При этом объект можно выбросить и снова взять, вылетов вроде нет.