Winsor 178 Опубликовано 28 Сентября 2015 (изменено) ТЧ 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 так и остался. Благодарю за любую информацию. Изменено 28 Сентября 2015 пользователем Winsor Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 29 Сентября 2015 Хм. я собственно так и сделал - но смарт все равно остается не тот который я ему назначил в кастомдате, так же мне пока непонятно на основании каких критериев вообще назначается смарт НПС, у которого в кастомдате до этого не было указано ни смарта, ни none=true. P.S. если все таки , уважаемый UnLoaded - если Ваш ответ был сарказмом - поделитесь какой либо информацией, что именно в xr_logic, xr_gulag отвечает за назначение смарта НПС, у которого в конфиге о смарте нет ничего. Благодарю! Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 30 Сентября 2015 Место есть в целевом гулаге, по критериям подходит , в кастомдате параметры правильные. Тонкость в том что при создании, т.е. alife:create данных в кастомдате не было и у объекта НПС поле smart_terrain_conditions пустое, по условиям смарта - он подходит под любой. А при добавлении в кастомдату через нетпакет конкретного смарта после вызова obj:brain():update() само собой не происходит ни перечитывания поля smart_terrain_conditions, ни повторного вызова se_smart_terrain:enabled. и в результате объект, даже имея в кастомдате правильный параметр, остается в старом гулагосмарте. вызов se_smart_terrain:register_npc помещает НПС в смарт, но при этом у НПС не появляется данные этого смарта. сложно сказать, к чему это может привести, так что в таком вызове тоже толку 0. Уважаемые, есть ли у Вас опыт в назначении смарта уже заспавненному НПС с заменой кастомдаты? Либо надо сразу менять smart_terrainid в нетпакете? Или еще какие способы? Благодарю! Поделиться этим сообщением Ссылка на сообщение