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

[CoP] Ковыряемся в файлах


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

Clayman, А зачем тебе вообще через скрипт визуал менять? Не проще создать сколько угодно нужных профилей с нужными визуалами и вводить (убирать) в игру?

Ну если тебе так "проще", то другим как раз проще и не мусорить в конфигах и именно нужному неписю в нужное время менять визуал, а не изгаляться с переспавнами по профилям. :crazy:

 

Shredder, ты, видно, не из любителей читать ... Про визуалы/броники только пару дней назад в топике по ковыряниям в файлах SoC упоминалось - почитал бы! И, визуал, это тебе не просто внешний вид непися, а как раз и его защита/иммунитеты - со всеми из этого вытекающими ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

В character_desc_* куча профилей, в которых уже прописан визуал. Допустим я в них хочу заменить, но не во всех, тогда что делать?. А в моём способе что муторно? Визуал в одном месте прописать? Ну а с иконками вообще не заморачиваюсь, какие есть, такие есть, всё равно, когда играю, на них уже не смотрю. Да и потом, вдруг нужно какой-нибудь визуал из игры убрать - удаляю его из одного файла и всего делов. Мне кажется, способ оч. хороший.

 

Добавлено через 30 мин.:

Artos, про защиту я знаю, только сейчас про неё речи нет. В общем, попытался я сделать через net-paketы (своровал кусок кода из imm мода). Принцип работы: через нет-пакет записываю новый визуал, потом отправляю npc в оффлайн, потом отправляю обрано в онлайн. И всё в принципе работает, но есть проблемка: у трупов появляются вещи, которых быть не должно: гармошка, пда, гитара и т.д. Может кто-нибудь подскажет из-за чего?

Функция, которая отправляет npc онлайн/оффлайн:

function convert_npc(npc_id, state)
local npc=level.object_by_id(npc_id)
local serv_obj=alife():object(npc_id)

if not serv_obj then
	need_change[npc_id]=nil
	return
end

if npc == nil and state == "turn_on" then
	serv_obj.sim_forced_online = true
	if serv_obj.online ~= true then
		serv_obj:switch_online()
	end
	need_change[npc_id]=nil
elseif npc and state == "turn_off" then
	if _m.is_stalker(serv_obj) then
		npc:clear_animations()
		if serv_obj:alive() then
			npc:stop_talk()
		end
	end
	serv_obj:switch_offline()
	need_change[npc_id]="turn_on"
end
end

 

Изменено пользователем Artos
Ссылка на комментарий

Shredder, это как же "про защиту" ты не говоришь(?), ежели уже дважды сетуешь на "неубиваемость" неписей после переодевания?! :crazy:

В чем же тогда вопрос с переодеванием визуала? Пока именно только о "неубиваемости" и о "выглядят как комок с тряпками" - вроде как вопрошаешь ...

Ну а по появлению (иль исчезновению) предметов в трупах - почитай-ка топики и ФАКи на предмет спавна лута в трупы менеджером death_manager.script. Не мешай разные вопросы в один.

 

И, прячь портянки кодов под спойлер, плз.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, возможно ты не внимательно посмотрел мой пример использования функции set_visual_name, т.к. там я совершенно не меняю параметры защиты у visual'а, более того там вообще всего один файл изменён по сравнению с оригиналом. Так о какой защите может идти речь? Проблема - npc после переодевания их функцией set_visual_name становятся бессмертными, независимо от того, какой визуал ты им указываешь. Да и к тому же, при переодевании npc нет-пакетом такой проблемы нет. Вообщем, либо после (до) использования функции set_visual_name c npc нужно что-то ещё сделать, либо эта функциия вообще предназначена только для ГГ, т.к. приминетельно к нему никаких проблем не возникает.
Ссылка на комментарий

Shredder, к моему сожалению ... чаще замечаю то, о чем не подозревает сам спрашивающий, чем невнимателен к прочитанному ... ;-)

1. Ты так и не понял, что визуал для непися - это и есть защита! Смена визуала - как раз, в случае разных типов/классов визуалов, и есть изменение параметров защиты непися.

Что значит(?) всего лишь одна строка:

self.object:set_visual_name([[actors\stalker_neutral\stalker_neutral_nauchniy]])

Да всего лишь то, что непись теперь имеет костюм с высоким коэффициентом иммунитетов (high_resistance) и выше среднего параметры для bone_protection (body_damage_5,head_damage_3). Предполагаю, что проверял ты в игре на новичке иль начальном сталкере, которые появляются в начале новой игры и у которых защита как раз начального уровня.

А ты все гутаришь "не трогаю защиту" :crazy:

И не нужно голословить в топике о бессмертии после переодевания в любой костюм. Чудес не бывает и тем более в игре, где все цифры/параметры можно прочитать и сравнить. Тут уже недавно было и ты видно не прочитал .. о "в чем бессмертие меряешь - в попугаях?".

 

2. То, что сами разрабочики используют данную функцию (set_visual_name) именно в xr_motivator.script, т.е .в биндере сталкеров, а не в акторском биндере, как раз говорит, что применяется не к актору, а к неписям.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

На счёт попугаев. Специально для тебя добавил ещё один файлик, в котором в начале игры добавил себе гаусс. Встречаю двух типов в научных комбензонах (переодетых функцией set_visual_name), подхожу в упор и стреляю в голову из гаусса!!!. Он только: "Ах ты ж епт..." и по мне стрелять. Я думаю, мне не стоит тебе рассказывать, на сколько мощный гаусс в оригинале ЗП? И о том, что параметры защиты прошиты в визуале указанием на определённый файл я оч. хорошо знаю.

Поэтому, уважаемый Artos, вместо того, чтобы принимать меня за дурачка, который совсем не шарит в кодах Сталкера, попробовал бы воспроизвести ситуацию и убить этих двух типов даже используя вот такую строку:self.object:set_visual_name([[actors\stalker_neutral\stalker_neutral_1]])

Изменено пользователем Shredder
Ссылка на комментарий

Shredder, прочитай свой первичный вопрос(!) и теперешние сетования/пояснения ... Какова цель твоих постов?

За дурочка тут никого не считают, но ... нередкость когда спрашивают о том, о чем сами же не понимают иль рассуждают о том, что и близко не лежало.

В чем конечная цель вопросов? Как пользоваться функцией иль как сменить визуал?

О пользовании функцией уже ранее сказано, бессмертными не становятся как и "кучей трепья".

 

Ставим как в твоем примере в stalker_binder:net_spawn код со сменой визуала на "actors\\stalker_neutral\\stalker_neutral_1" первому же новичку который спавнится в начале новой игры. Кстати, именно этот визуал он изначально и имеет.

Записываем получившийся нет-пакет (пишем на 1-ом апдейте). Если интересно, могу выложить.

Берем обычный винторез (зачем нам гаусс?) и обычным для него патроном сносим бошку неписю первым же выстрелом - никакого бессмертия.

Однако то, что при онлайновой замене этой функцией визуала у неписей дополнительно повышается "пулестойкость" - есть такое дело. Почему именно так - вероятно только разработчики могут сказать, т.к. нет пакеты ничего криминального не говорят. Поисследую.

Ну а если нужно просто менять визуал - то уже годы как это делабт именно нет-пакетами и не жалуются ... ;-)

 

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Я знаю, что ещё со времён Теней Чернобыля успешно используют нет-пакеты для этого дела. Но вот захотелось в ЗП использовать новую функцию, а она упрямится (((

Прочитал свой первый пост, в конце которого: как можно заставить эту функцию (set_visual_name) работать правильно?

Если тебе не сложно, то покажи пожалуйста код, как её используешь ты.

Ссылка на комментарий

Shredder, грубо говоря у себя в наработках я не использую эту функцию (set_visual_name), т.к. стараюсь писать по-возможности "кроссплатформенно", т.е. под все три версии игры.

Был момент, когда повозился с нею, посмотрел на что способна и чем удобна. Минусов не меньше чем плюсов. Помимо уже затронутой некоторой непонятки с изменением иммунитетов, основной минус - то что применимо только для клиентских об'ектов.

Но если ранее не было полного доступа к нет-пакетам сталкеров и нельзя было понять отчего есть особенности при смене - отложил ...

Твой вопрос как раз вновь заставил вспомнить и, как выше уже сказал, попробую найти разницу в замене нет-пакетами и "штатной" для ЗП функцией.

Сейчас же проверял в точности как и ты, т.е. при появлении непися в он-лайне меняю ему визуал и смотрю ... Про "комок тряпок" наверное не стОит упоминать, ты скорее всего напутал с названием/путем визуала. Слабые визуалы вполне "убиваемые", о чем и написал уже. Более защищеные - дают бОльший прирост к иммунитетам, тут нужно поисследовать ... может дополнительно включаются какие флаги/режимы. Ведь не просто так разрабы применили у себя эту функцию для присвоения визуала актора кому-то другому (типа двойника).

 

Т.о. функция то работает правильно, если ей давать правильный визуа. ;-) Ну а особенности ее слишком "правильной" работы, которая именно тебе не подходит и как ее привести к "обычной" замене визуала - требует времени и анализа. Через день-два попробую дать информацию.

 

Добавлено через 123 мин.:

P.S. Кстати, я так и не понял из вопроса, тебе нужно менять визуалы для новых (тобою спавнящихся) неписей или уже имеющихся в игре. Все же это имеет свои особенности.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Ты натолкнул меня на одну мысль и я ещё немного поэкспериментировал. Что выяснилось:

1) set_visual_name отрабатывает норм, если ей передаётся такой же visual, как и был. Делал так:

visual = npc:get_visual_name()

npc:set_visual_name(visual)

 

 

походу, где-то в движке проверка стоит, и функция просто не выполняется.

 

2) Теперь я знаю зачем разрбам понадобилась функция set_visual_name - для отыгрывания сценок с гг, когда спавнится сталкер и ему устанавливается визуал, как у ГГ. И понятно, что в этой сценке того двойника не должны убить, вот функция и делает его бессмертным.

 

3) А комок то всё равно получается.

~150Uz3fMF.jpg

Вот как я его получал:

local stalker_ids = {}

 

function update()

local npc

local visual

for id,t in pairs(stalker_ids) do

if t then

npc = level.object_by_id(id)

if npc and (t + 20000 < time_global()) then

npc:set_visual_name([[actors\stalker_neutral\stalker_neutral_nauchniy]])

stalker_ids[id] = nil

end

end

end

end

 

function on_npc_spawn(npc)

if npc and npc:alive() then

stalker_ids[npc:id()] = time_global()

end

end

 

 

 

Как говорится, в споре рождается истина! И хоть я так и не узнал, как правильно использовать функцию set_visual_name, зато теперь мне совершенно ясно, что её не нужно использовать для моих целей, т.к. она для этого не предназначена.

Ссылка на комментарий

Shredder, хм ... вот за скрин и код "как скрутил" - спасибо, теперь еще немного инфы к особенностям функции.

Проверю, конечно, почему нельзя менять визуал спустя N-ное время после спавна ... или это некая особенность.

В общем функция явно не для "нормальной" смены вызуала неписям.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Возвращаясь к вопросу (Shredder) о функции set_visual_name:

 

Довольно странная и возможно кому-то интересная функция. Как "правильно" она должна работать или как "правильно" ее использовать - можем пока только предполагать.

Информация пока такова:

1. Функция, вызываемая для гейм-об'екта, устанавливает именно гейм-об'екту указываемый визуал, совершенно не обращаясь к серверной копии этого об'екта (каких-либо манипуляций с нет-пакетами не обнаружено).

Обращаю внимание, что обычно смена визуала идет от обратного, т.е. заменяется серверному об'екту и, переводом в оффлайн и обратно, параметры передаются соответствующей копии гейм-об'екта.

2. По единственному практическому примеру из исходной игры можно заметить, что смена визуала разработчиками предусматривалась в самом начале активизации метода net_spawn в биндере сталкера. При чем(!), судя по месту строк, т.е. до: object_binder.net_spawn(self, server_object) - предполагаю, что тут происходит некая синхронозация серверного и клиентского об'ектов в движке игры.

НПС, получив таким образом новый визуал вполне адекватно выглядит и анимации штатные.

Имеется особенность:

- если визуал менять на точно такой же - НПС немного повышает свою защиту/иммунитеты;

- чем более отличен по типу новый визуал от прежнего - тем неубиваемее стновится НПС ...

3. В случае, если визуал "не родной" и функция замены визуала вызывается несколько позже чем в методе net_spawn, хотя бы из level.client_spawn_manager():add(...), что практически одномоментно с нет-спавном, визуал/модель НПС сворачивается в "клубок" и начинает "ползать" по локации, имитируя поведения самого НПС. Т.е. "ходит", порой зарываясь в грунт, стреляет, виден на карте, ... "Корявость" визуала вероятно имеет причиной рассинхронизацию серверной и клиентских копий об'екта из-за временнОй задержки.

4. Если такого НПС, с нормальным визуалом/моделью или свернутой в клубок, отправить в оффлайн и обратно (или сэйв-лоад) - НПС восстанавливает свой первоначальный визуал и свойства ... Это вероятно можно использовать для неких эффектов временной маскировки/мимикрии/временного бессмертия и др. ...

 

Вот такая хитрая и малопонятная, но возможно интересная функция set_visual_name имеется в ЗП. ;-)

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Возвращаюсь к теме визуала, хотя здесь скорее всего вопрос по нет-пакетам (туго у меня с ними). Сначала объясню на словах, что делаю, потом код. Мне нужно в первый спавн сталкера сменить ему визуал и установить флаг, что визуал сменён, чтобы при следующем спавне уже не менять визуал. Для этого я в файле se_stalker.script добавляю этот флаг self.not_first_spawn = false в функцию se_stalker:__init . В функции сохранения/записи в этом же файле добавляю соответственно в se_stalker:STATE_Write(packet) строку packet:w_bool(self.not_first_spawn), а в функцию se_stalker:STATE_Read(packet, size) строку self.not_first_spawn = packet:r_bool() в самом конце функций. В функцию se_stalker:switch_offline() в начале ставлю self.not_first_spawn = true. Для работы с нет-пакетами использую функции из SGM-мода. В первый спавн сталкера я нет-пакетом заменяю визуал. Чтобы изменения коснулись клиентского объекта - отправляю его в оффлайн, а потом обратно в онлайн. Но почему то иногда флаг спавна лута death_droped получается установлен в true ещё до смерти сталкера, из-за этого при убийстве у него появляются гармошка, гитара, кпк и т.д. Я подозреваю, что как раз в функциях _p.read_stalker_params, _p.write_stalker_params, которые как раз работают с нет-пакетом, тоже нужно внести изменения, чтобы они правильно записывали/читали новый параметр not_first_spawn, но не могу сообразить, что нужно добавить. Помогите пожалуйста. Может есть более лёгкий способ запомнить, что сталкер уже появлялся на свет?

function se_stalker:__init (section) super (section)

self.ini = nil

self.ini_initialized = false

 

self.smart_terrain_conditions = nil

self.smart_terrain_conditions_initialized = false

 

-- этот флаг берётся из работы смарта

-- true = всегда в онлайне

-- false = всегда в офлайне

-- condlist = условие, которое отпределяет true или false

-- nil = смарту всё равно

self.job_online = nil

self.job_online_condlist = nil

 

self.death_droped = false --'Генерил ли персонаж выпадаемые предметы или нет.

self.not_first_spawn = false --'Указывает, что сталкер заспавнился первый раз

 

self.m_registred = false

 

self.sim_forced_online = false

 

if db.offline_objects[self.id] == nil then

db.offline_objects[self.id] = {}

end

 

self.board = sim_board.get_sim_board()

end

 

function se_stalker:switch_offline()

self.not_first_spawn = true

_callbacks.on_npc_switch_offline(self)

cse_alife_human_stalker.switch_offline(self)

end

--------------------

function se_stalker:STATE_Write(packet)

cse_alife_human_stalker.STATE_Write (self, packet)

if self.online then

packet:w_stringZ(tostring(level and level.object_by_id(self.id) and level.object_by_id(self.id):level_vertex_id()))

else

packet:w_stringZ(tostring(db.offline_objects[self.id] and db.offline_objects[self.id].level_vertex_id))

end

packet:w_stringZ(tostring(db.offline_objects[self.id] and db.offline_objects[self.id].active_section))

packet:w_bool(self.death_droped )

packet:w_bool(self.not_first_spawn)

end

--------------------

function se_stalker:STATE_Read(packet, size)

cse_alife_human_stalker.STATE_Read (self, packet, size)

if self.script_version > 10 then

local old_lvid = packet:r_stringZ()

if db.offline_objects[self.id] == nil then

db.offline_objects[self.id] = {}

end

db.offline_objects[self.id].active_section = packet:r_stringZ()

if db.offline_objects[self.id].active_section == "nil" then

db.offline_objects[self.id].active_section = nil

end

if old_lvid ~= "nil" then

db.offline_objects[self.id].level_vertex_id = tonumber(old_lvid)

end

end

self.death_droped = packet:r_bool()

self.not_first_spawn = packet:r_bool()

end

 

 

function read_stalker_params(id)

local sobj

if type(id) == "number" then

sobj = alife():object(id)

else

sobj = id

id = sobj.id

end

if sobj then

stpk:w_begin(0)

uppk:w_begin(0)

sobj:STATE_Write(stpk)

sobj:UPDATE_Write(uppk)

local size=stpk:w_tell()

local size1=uppk:w_tell()

 

stpk:r_seek(2)

uppk:r_seek(2)

 

local ret = {}

 

-- cse_alife_trader_abstract properties

ret.money = stpk:r_s32()

ret.specific_character = stpk:r_stringZ()

ret.trader_flags = stpk:r_s32()

ret.character_profile = stpk:r_stringZ()

ret.community_index = stpk:r_s32()

ret.rank = stpk:r_s32()

ret.reputation = stpk:r_s32()

ret.character_name = stpk:r_stringZ()

 

-- cse_alife_object properties

ret.game_vertex_id = stpk:r_u16()

ret.distance = stpk:r_float()

ret.direct_control = stpk:r_s32()

ret.level_vertex_id = stpk:r_s32()

ret.object_flags = stpk:r_s32()

ret.custom_data = stpk:r_stringZ()

ret.story_id = stpk:r_s32()

ret.spawn_story_id = stpk:r_s32()

 

-- cse_visual

ret.visual_name = stpk:r_stringZ()

 

ret.upd_extra_data=read_extra(uppk,size)

ret.extra_data=read_extra(stpk,size)

return ret

end

return nil

end

 

-- таблица параметров и id на входе

function write_stalker_params(ret,id)

local sobj

if type(id) == "number" then

sobj = alife():object(id)

else

sobj = id

id = sobj.id

end

if sobj then

stpk:w_begin(0)

uppk:w_begin(0)

 

-- cse_alife_trader_abstract properties

stpk:w_s32(ret.money)

stpk:w_stringZ(ret.specific_character)

stpk:w_s32(ret.trader_flags)

stpk:w_stringZ(ret.character_profile)

stpk:w_s32(ret.community_index)

stpk:w_s32(ret.rank)

stpk:w_s32(ret.reputation)

stpk:w_stringZ(ret.character_name)

 

-- cse_alife_object properties

stpk:w_u16(ret.game_vertex_id)

stpk:w_float(ret.distance)

stpk:w_s32(ret.direct_control)

stpk:w_s32(ret.level_vertex_id)

stpk:w_s32(ret.object_flags)

stpk:w_stringZ(ret.custom_data)

stpk:w_s32(ret.story_id)

stpk:w_s32(ret.spawn_story_id)

 

-- cse_visual

stpk:w_stringZ(ret.visual_name)

 

write_extra(uppk,ret.upd_extra_data)

write_extra(stpk,ret.extra_data)

 

local size=stpk:w_tell()

stpk:r_seek(2)

uppk:r_seek(2)

sobj:STATE_Read(stpk,size)

sobj:UPDATE_Read(uppk)

end

end

 

 

local new_visual = visuals[math.random(1,#visuals)]

 

local npc_data = _p.read_stalker_params(server_obj)

 

if not npc_data then

return

end

npc_data.visual_name = new_visual

_p.write_stalker_params(npc_data, server_obj)

need_change[npc:id()] = 'turn_off'

 

 

function vch_update()

for id, state in pairs(need_change) do

if state then

convert_npc(id, state)

end

end

end

 

function convert_npc(npc_id, state)

local npc=level.object_by_id(npc_id)

local serv_obj=alife():object(npc_id)

 

if not serv_obj then

need_change[npc_id]=nil

return

end

 

if npc == nil and state == "turn_on" then

serv_obj.sim_forced_online = true

if serv_obj.online ~= true then

serv_obj:switch_online()

end

need_change[npc_id]=nil

elseif npc and state == "turn_off" then

if _m.is_stalker(serv_obj) then

npc:clear_animations()

if serv_obj:alive() then

npc:stop_talk()

end

end

serv_obj:switch_offline()

need_change[npc_id]="turn_on"

end

end

 

 

Ссылка на комментарий

Shredder

1. Я бы не советовал увлекаться добавлениями в нет-пакет своих новых значений, тем более, как ты пишешь "туго у меня с ними".

Работа с нет-пакетами требует аккуратности и ТОЧНОГО понимания что/куда ты пишешь/читаешь, тут каждый(!) байт/бит важен.

2. Тобою используются кастрированные функции чтения/записи нет-пакетов! Сам посмотри, все что в нет-пакетах после параметра visual_name - считывается в общую кучу extra_data и твоя читалка писалка (соответственно и ты) никак не знает ни о каких death_droped и тем более добавленном тобою not_first_spawn. Соответственно, в лучшем случае, ты просто теряешь этот новый параметр, в худшем - искажается нет-пакет.

 

Что мешает тебе в качестве флага о уже свершившемся факте смены физуала использовать или инфопоршень или просто писать переменную в pstor твоему об'екту, если конечно подобное только для онлайновых важно?

Даже просто прочитать из нет-пакета имеющийся визуал у непися и принять решение - стОит его менять иль нет - это тоже вариант.

В общем, если хочешь ставить метку именно в нет-пакет, то и подбери соответствующий инструмент чтения/записи и освой работу с нет-пакетами на дОлжном уровне.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Shredder и Artos

NPC в свернутом состоянии похож на модель без указанной анимации, как это происходит в СДК при просмотре анимаций.

Возможно при смене вижуала модели просто не успевает назначить анимации. :)

 

Может причина разгадка в скриптах назначающих анимки НПС?

 

Пишу не из пустого места, лишь бы что-то написать. Я возвращал анимации из ЧН в ЗП сидения у коста, затрагивая файлы указывающие какую за какой анимку проигрывать, в одном из случаев получил именно такие комки.

Изменено пользователем karavan
Ссылка на комментарий

Ребята, такой вопрос: кто-нибудь создавал новые укрытия от выбросов?

 

Я тут наковырял кое-что. Значит, в распакованном all.spawn создается спейс-рестриктор с именем zat_surge_hide_b42 (это из имеющихся).

 

Вот его

 

[227]

; cse_abstract properties

section_name = space_restrictor

name = zat_surge_hide_b42

position = 26.2803802490234,5.27456712722778,367.865234375

direction = -0.0748270004987717,0.522725999355316,0.00596300000324845

 

; cse_alife_object properties

game_vertex_id = 0

distance = 0

level_vertex_id = 293223

object_flags = 0xffffff3e

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 15.4629888534546,0,0

shape0:axis_y = 0,6.51879787445068,0

shape0:axis_z = 0,0,15.4629888534546

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

 

Далее, регистрируем это укрытие в файле configs\misc\surge_manager.ltx.

 

И все, будет работать?

 

Или где-то еще что-то нужно прописать?..

 

Есть мысли по этому вопросу?

Ссылка на комментарий

Надеюсь туда зашел. В общем решил освоить ЗП, подключил n-количество локаций, заспавнил на них некоторое количество разных физ. объектов и тп, заспавнить нпс я пока не смог, по этому решил добавить аномалии и артефакты, с аномалиями проблем не возникло, а вот с артефактами не "срослось". Делал все по статье из Сталкер Инсайд, но артефакты в аномалии так и не появились.

Может на новых локациях поцесс добавления артефактов отличается, может где-то, что-то надо еще прописать?

 

Ссылка на комментарий

karonbaron, об этом уже много раз писалось и статья на вики есть. Нужно зарегить смарт в simulation_objects_props. ltx с параметром surge = 1 и создать работы (way points типа смарт_surge_1_walk (look)), чтобы нпс юзали укрытие.

 

Artem_K., процессом появления артов управляет спавн-элемент anomal zone. Прописывай его конфиг по аналогии с ЗП-шными (в gamedata\configs\scripts\уровень\anomaly), должны быть вей-поинты для спавна артов и прочие параметры. Это в теме обсуждалось, ищи поиском.

Изменено пользователем Clayman
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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