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

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


Svoboда

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

Ребят, а как можно ресетнуть работу в гулаге конкретному неписю? Если он начал играть анимацию не в том месте, например. Пробовал в xr_gulag готовые фции типа resetjob, не работают, нпс продолжает играть анимацию не отрываясь. 

Пробовал через xr_logic.initialize_obj, в этом случае нпс действительно выходит из анимации и идёт в правильный вертекс, но там останавливается и замирает, игнорируя path_look с анимацией. 

Как можно его вновь взяться за работу? 

 

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


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

@AndreySol именно с переключением схемы, например, по сигналу по достижению поинта - не пробовал. Пробовал делать 2 вейпоинта, где второй вейпоинт уже с флагом для патч_лука с анимацией. Всё равно садится тупо мимо периодически. Непонятно. Ну я делаю не ради одного нпс, а на каждой локе во многих лагерях новые работы с анимациями. 

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

 

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


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

@WinCap эх, если бы такие были :(

Все оригинальные, соляночные. Такая проблема была и в 10 соли и в 16 на  огср, например. 

Я лишь модифицирую state_lib и state_mngr_animations_list, регистрируя новые анимки, после чего в gulag_уровень добавляю новые работы

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


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

@WinCap проблема оказалась весьма специфична. Когда мы грузим сейв, то xr_gulag сразу берёт на себя всех НПС, что были в работе гулага в момент сохранения. И сразу же выдаёт им работу при условии, что они не находятся дальше контрольной точки гулага больше чем на 50 игровых метров. В такмо случае все НПС в момент загрузки сейва моментально получают работу и начинают её выполнение, без возможности сдвинуться с места (за исключением патрульных, у которых зацикленный набор вейпоинтов). Пробовал отключать перехват xr_gulag'а, в таком случае нпс доходят до точных координат, но работу не начинают. Казалось бы - вот он, выход из ситуации, задать небольшой таймер, чтобы гулаг сразу не перехватывал неписей, а давал им возможность дойти до точной координаты, чтобы после красиво сесть на стульчик, например.

Но в таком случае все те НПС, которые сидели у костра, вдруг начинают одновременно ломиться в одну единственную точку, толпой. Видимо именно поэтому в ЧН были введены смарткаверы, которые, судя по всему, имели приоритет над работами гулагов типа, не знаю.

Эх

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


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

@AndreySol ну я проверял опытным путём. Там оказалось всё хитрее даже, чем я предполагал. Те НПС, которые приходят из вне гулага, они регистрируются и спокойно проходят к тем вейпоинтам, которые заданы в path_walk, анимация отыгрывается верно.

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

Я просто ковырял хр_гулаг и отключал обработку нпс во время загрузки сейва. В этом случае тот нпс, который при загрузке сместился, действительно отправился строго в ту точку, которую я прописал в path_walk, я отслеживал этот момент прям с точностью до ноль-десятых координат с помощью g_vertex_debug (OGSR). 

Когда нпс приходит на точку он замирает, ожидая когда его обработает заранее мною отключенный xr_gulag. Ну, так и продолжает стоять. 

Выходит что именно xr_gulag и заставляет всех нпс во время загрузки сейва моментально и без вариантов сразу приниматься за работу, не давая неписям даже шаг в сторону сделать (за исключением тех нпс. у кого в path_walk цепь вейпоинтов).

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

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


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

@AndreySol Не спорю, что спавн объекта идет через движок, всё правильно. Но по поводу xr_gulag: из net_spawn при загрузке сейва идет вызов ф-ций в xr_gulag, после чего в этом же самом xr_gulag идет работа с нетпакетами, где проверяется работал ли НПС во время сейва. И если работал, то xr_gulag моментально заставляет этого НПС возобновить работату, не давая возможности сначала вернутсья на вейпоинт, если он немного сместился при сейв\лоаде. Вот что я наблюдал) 

То есть проблема именно в том, что xr_gulag просто не дает возможности НПС подойти вернуться к вейпоинту, моментально выдавая ему работу (нпс начинает играть анимацию).

Есть нпс, которые находятся вне логики гулага, а стоят на своих личных path_walk'ax и path_look'ах, прописанных в саму логику непися. Они всегда со 100% вероятностью будут правильно отыгрывать анимацию в строго заданных координатах, всегда. Если при загрузке сейва они сместятся, то они сначала вернутся на вейпоинт. Потому что их не обрабатывает xr_gulag :)

Опять таки, это всё лично мое наблюдение и мои выводы, которые я построил в результате экспериментов и изучения когда скрипта xr_gulag.

Скрытый текст

-- сохранения общего состояния гулага
function gulag:save_common( packet )
	packet:w_u8( self.casualities )
	packet:w_u8( self.state )
	utils.w_CTime( packet, self.stateBegin or smart_terrain.CTime_0 )

	packet:w_u8(self.population)
	packet:w_u8(self.population_comed)
	packet:w_u8(self.population_non_exclusive)

	packet:w_u8( #self.Job )

	for i, job in ipairs( self.Job ) do
		packet:w_u32( job.begin            or 0 )
		packet:w_u32( job.fill_idle        or 0 )
		packet:w_u32( job.idle_after_death_end or 0 )
	end
end

-- восстановление общего состояния гулага
function gulag:load_common( packet )
	self.casualities = packet:r_u8()
	self.state       = packet:r_u8()
	self.stateBegin  = utils.r_CTime( packet )

	self.population = packet:r_u8()
	self.population_comed = packet:r_u8()
	self.population_non_exclusive = packet:r_u8()

	local n = packet:r_u8()
	local job
	for i = 1, n do
		job = {}
		table_insert( self.JobLoaded, job )

		job.begin            = packet:r_u32()
		job.fill_idle        = packet:r_u32()
		job.idle_after_death_end = packet:r_u32()

		if job.fill_idle == 0 then job.fill_idle = nil end
		if job.idle_after_death_end == 0 then job.idle_after_death_end = nil end
	end
end

-- сохранение информации об объекте
function gulag:save_obj( packet, obj_id )
	packet:w_bool ( self.Object_begin_job[obj_id] )
	packet:w_bool ( self.Object_didnt_begin_job[obj_id] )
	packet:w_u8   ( self.ObjectJob[obj_id] or 0 )
end

-- восстановление информации об объекте
function gulag:load_obj( packet, obj_id )
	self.Object[obj_id] = true
	self.Object_begin_job[obj_id] = packet:r_bool()
	--self.Object_didnt_begin_job[obj_id] = packet:r_bool()
	local jobN = packet:r_u8()
	if jobN ~= 0 then
		self.ObjectJob[obj_id] = jobN
	end
end

 

 

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


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

@naxac чёт я думал что в баре работы гулага. Хотя там же квестовики... 

Окей, мерси за подсказку, буду мув менеджер ковырять) 

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


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

Господа, а как бы с помощью level.add_call(ф1,ф2) передать вместе с ф1 и ф2 параметры функций?

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


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

@Rod_K Если нужно чтобы нпс заспавнились и стояли исключительно на своих точках, прописанных в Path_walk, то смотри в сторону Акима. 

Если я не ошибаюсь, то, чтобы он никуда не уходил, у него в логике прописан параметр smart_terrain = false или none, что-то такое, не вспомню точно. В общем параметр, не пускающий искомого НПС на другие работы. 

Если кто вспомнит точнее - пусть поправят меня

  • Полезно 1

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


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

Господа, а реально ли модельке ГГ, (когда смотрим на него камерой от 3 лица), задать НЕ худовую анимацию какую-нить, как у неписей, типа sit_ass? Есть предположение куда копать? 

  • Сомнительно 1

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


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

Ребят, а вот такой странный вопрос.

Вот неписи (ТЧ) перемещаются в оффлайне по локациям и между ними, а в каких скриптах эти перемещения регулируются и описываются? Это в какую сторону нужно копать?

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


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

Доброго времени! А есть ли возможность зарегистрировать НПС в конкретном гулаге, при условии что мы 100% знаем что там есть на текущий момент свободная работа?

Без редактирования gulag_локация.script 

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

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


Ссылка на сообщение
(изменено)

@AndreySol ну что за предвзятость? Мне никогда не было лень скрипты править. Суть вопроса в другом. По моей задумке я хотел через диалог с НПС уметь регистрировать его в разных гулагах. 

Например, нажав в диалоге на "иди в Деревню Новичков" НПС пойдет туда и зарегистрируется, возьмёт работу.

Нажмем на "иди на Свалку в Ангар" - он пойдет регистрироваться туда. Вот я и ищу метод (если такой возможен), как через скрипты отправить НПС туда, куда нам надо. Чтобы он не просто пришел на вейпоинт, прописанный в Path_walk, а именно чтобы встал под управление гулага.

PS

Кажется нашел, что искал. se_smart_terrain:register_npc( obj )

Изменено пользователем _Sk8_AsTeR_
  • Нравится 1

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


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

@Zander_driver Идея, вкратце, такая была:

Строю большую сложную сцену по выдуманному квесту для НПС с новыми анимациями и т.д. И в какой-то момент, при определённом развитии сюжета, этот НПС просто должен "уйти", стать обычным и пойти работать в гулаги. Почему для него не сделать отдельную работу в каком-нибудь гулаге - потому что еще была позаимствована dsh_walking_stalkers  у товарища DSH, которая позволяет неписям гулять по зоне от смартов к смартам. Соответственно и наш искомый непись будет бродить по всей зоне. 

Наверно изначально я неправильно описал свою "хотелку". Нужно как-то в процессе геймплея "забыть" индивидуальную логику НПС и передать его под работу смартов. 

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


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

Дня доброго! Подскажите пожалуйста. Есть условный простой итем. Как его можно сделать юзабельным? Куда копать?

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


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

@AndreySol Да, уже успел разобраться)

А есть другой вопрос. Каким образом можно сделать итем юзабельным со счетчиком? Чтобы его можно было использовать несколько раз перед тем, как он истратится в инвентаре?

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


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

Доброго времени. А есть способ узнать, присутствует ли у непися, который находится в оффлайне (например на другой локации) в его инвентаре конкретный итем?

 

  • Жуть! 1

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


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

Мужики, спасайте :(

Имеем следующий набор работ:

Скрытый текст
		--4 работы доп охраны
		for i = 6, 9 do
            t = { section = "logic@fox_ohrana_" .. i, idle = 0, prior = 8, state = { 0 },
                in_rest = "", out_rest = "",
			}
            table.insert(sj, t)
		end

		--Кулинар идёт сюда
		t = { section = "logic@artem", idle = 0, prior = 11, state = { 0 },
            in_rest = "", out_rest = "",
            position_threshold = 5,
			predicate = function(obj_info)
                return obj_info.story_id == 9509
            end
        }
        table.insert(sj, t)

 

Проблема в том, что искомый нпс с СИДом 9509 занимает одну из работ сверху (с низшим приоритетом). Почему он отказвыается брать работу с высоким приоритетом? Она ведь точно свободная, ибо предикейт для него сделан с проверкой по СИДу?

 

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


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

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

AMK-Team.ru

×
×
  • Создать...