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

Создание нового НПС


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

ТЧ 1.0006 + НС

Уважаемые, подскажите пожалуйста, каким образом можно изменить НПС его смарт после спавна его скриптом. Пытаюсь делать так:

--self - это смарт, куда я хочу поместить НПС (он создан в all.spawn), spawn_section==esc_stalker_respawn_1 - взял любого от фонаря из конфигов
local obj = alife():create(spawn_section,self.position,self.m_level_vertex_id,self.m_game_vertex_id) 
if not (IAmAStalker[obj:clsid()] or IAmAMonster[obj:clsid()]) then --не-не-не
          alife():release(obj)
          return false
end
--тут надо задать смарт
local npcPacket=m_netpk.get(obj)
if npcPacket:isOk() then
         local packetData=npcPacket:get()
	 local custom=amk.parse_custom_data(packetData.custom_data)
	 if not custom.smart_terrains then
                 custom.smart_terrains={}
	 end
	 custom.smart_terrains[self.gparams.type]=tostring(true)
	 packetData.custom_data=amk.gen_custom_data(custom)
	 npcPacket:set(packetData)
	 obj:brain():update()
else --с нетпакетом чёто не то
 	 return false
end
					
get_console():execute("load ~~~ name: ".. tostring(obj:name()))
get_console():execute("load ~~~ online: ".. tostring(obj.online))
get_console():execute("load ~~~ smart_terrain_id: ".. tostring(obj:smart_terrain_id()))
local st=alife():object(obj:smart_terrain_id())
if st then
         get_console():execute("load ~~~ smart_terrain: ".. tostring(st:clsid()==clsid.smart_terrain))
         get_console():execute("load ~~~ smart_terrain_name: ".. st:name())
end

 

 

судя по логам - после записи нетпакета и brain():update() он как был взят смартом esc_lager так и остался.

Благодарю за любую информацию.

Изменено пользователем Winsor

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


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

Хм. я собственно так и сделал - но смарт все равно остается не тот который я ему назначил в кастомдате, так же мне пока непонятно на основании каких критериев вообще назначается смарт НПС, у которого в кастомдате до этого не было указано ни смарта, ни none=true.

 

P.S. если все таки , уважаемый UnLoaded - если Ваш ответ был сарказмом - поделитесь какой либо информацией, что именно в  xr_logic, xr_gulag отвечает за назначение смарта НПС, у которого в конфиге о смарте нет ничего.

 

Благодарю!

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


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

Место есть в целевом гулаге, по критериям подходит , в кастомдате параметры правильные.

Тонкость в том что при создании, т.е. alife:create данных в кастомдате не было и у объекта НПС поле smart_terrain_conditions пустое, по условиям смарта - он подходит под любой. А при добавлении в кастомдату через нетпакет конкретного смарта после вызова obj:brain():update() само собой не происходит ни перечитывания поля smart_terrain_conditions, ни повторного вызова se_smart_terrain:enabled. и в результате объект, даже имея в кастомдате правильный параметр, остается в старом гулагосмарте. вызов se_smart_terrain:register_npc помещает НПС в смарт, но при этом у НПС не появляется данные этого смарта. сложно сказать, к чему это может привести, так что в таком вызове тоже толку 0.

 

Уважаемые, есть ли у Вас опыт в назначении смарта уже заспавненному НПС с заменой кастомдаты? Либо надо сразу менять smart_terrainid в нетпакете? Или еще какие способы?

Благодарю!

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


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

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