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

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


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

 

 

как восстановить кнопку отключения
Мод Paradise Lost и DMX тебе в помощь, там это работает без багов и реализовано очень просто одним скриптом.
  • Нравится 1
Ссылка на комментарий

Очередной вопрос по логике.

Есть НПС, который двигается по очень простой схеме, от одной точки кампа до другой.

 

custom_data = <<END
[smart_terrains]
none = true
[spawner]
cond = {+info1}

[logic]
active = kamp

[kamp]
center_point  = mob_camp_center
path_walk = mob_camp_center_task
radius = 3
on_info = {+info2} walker1

[walker1]
path_walk = mob_walk
path_look = mob_look
on_info = {+info3} walker2

[walker2]
path_walk = mob1_walk
path_look = mob1_look
danger = danger_ignore
on_timer = 20000 | kamp1

[kamp1]
center_point  = mob1_camp_center
path_walk = mob1_camp_center_task
danger = danger_ignore
radius = 3

[danger_ignore]
ignore_distance = 0
END

 

 

Всё работает нормально, НПС идёт куда надо и приходит куда надо и там сидит травит байки.

Одна только неприятность : если ГГ уходит из алайфа НПСа, пошарить по локации и потом возвращается, например через некоторое время, то НПС оказывается в секции [walker2] почему-то. Потом согласно таймеру он конечно перейдёт в [kamp1].

 

Как сделать так, чтобы НПС при достижении [kamp1], всегда в нём и оставался, независимо, от того где шастает наш ГГ ?

Спасибо.

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

"Кругом зомби.....у меня кончаются патроны...."

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

@BFG, при переходе оффлайн/онлайн логика у НПЦ перезапускается с самого начала. То есть у тебя она начинается с kamp, затем быстро проскакивает до walker2, так как поршни выданы, а дальше переход только по таймеру.

Как вариант добавить еще поршень info4, выдавать его при переходе в секцию kamp1, а в секцию walker2 добавить условие on_info = {+info4} kamp1

Так же можно прописывать условия в active. Типа:

active = {+info4} kamp1, kamp
  • Спасибо 2
  • Полезно 1
Ссылка на комментарий

Подскажите, есть возможность поссорить ГГ с гулагом который в офлайн?

Сейчас использую рестриктор с радиусом 140, и координатами центра гулага, но, что то не нравится мне этот способ.

Ссылка на комментарий
@ins33, если память мне не изменяет, то только через x-ray extensions. Там есть методы для изменения отношений в оффлайне. Ну а без этого, написать скрипт, который дождется выхода в онлайн каждого члена гулага и далее по накатанной.
Ссылка на комментарий

Сталкеры, нужна помощь.

Спавню скриптом предмет в рюкзак:

function spawn_card()


local obj = alife():object("pred_rukzak")
if obj then
alife():create( "access_card", vector(), 0, 0, obj.id )
end
end

 

 

Предмет спавнится, но если сохраниться, то состояние рюкзака не сохраняется и предмет после загрузки сейва пропадает.

 

Пробовал делать так:

function spawn_card()
local obj = alife():object("pred_rukzak")
if obj then
alife():create( "access_card", vector(), 0, 0, obj.id )
local params = amk.get_invbox_data(obj)
params.custom = "[logic]\ncfg = scripts\\treasure_inventory_box.ltx"
amk.set_invbox_data(params, obj)
end
end

 

 

Но предмет все равно пропадает. Я что-то не так делаю, или что?

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

Сталкер - наше всё!

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

@AndrewMor, вот соляночная функция для спауна вещей кому угодно:

function spawn_item_in_inv(spawn_item,npc)
	if not npc then 
		npc = db.actor 
	end
	local item = alife():create(spawn_item, 
		npc:position(),
		npc:level_vertex_id(),  
		npc:game_vertex_id(),
		npc:id())
	
	if npc:id() ~= db.actor:id() then
		-- Фикс пропадания доспавненного предмета при сейв/лоаде
		level.client_spawn_manager():add(item.id, -1, fix_spawn_item_in_inv, npc)  -- Калбек на выход item в онлайн
	end

	return item
end

Комментарием отмечен тот самый трюк, что бы не пропадало. Вместо

alife():create( "access_card", vector(), 0, 0, obj.id )

сделай

spawn_item_in_inv( "access_card", obj )

Не знаю, какой баг таким образом обходится, но работает.

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

@AndrewMor, если при спавне предмета в инвентарь объекта объект находится в онлайне, то нужно либо поместить объект в оффлайн до выхода в онлайн заспавненного предмета, а через небольшое время вернуть обратно в онлайн. Либо после выхода в онлайн предмета сделать трансфер его из объекта в тот же объект - как-бы сымитировать, что он там не сам появился, а его туда положили.

Такой глюк движка...

@dsh, забыл написать функцию fix_spawn_item_in_inv - сам каллбэк, в котором происходит трансфер.

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

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

 

@AndrewMor, вот она

function fix_spawn_item_in_inv(npc, id, item)
    npc:transfer_item(item, npc)
end

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

 

 

вот соляночная функция для спауна вещей кому угодно:

Кому угодно - это очень хорошо. Но мой случай - inventory_box. Для ящика будет работать?

Сталкер - наше всё!

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

Здравствуйте. Сделал все, как написано в http://www.amk-team.ru/forum/topic/6458-uroki-po-modostroeniiu/?p=634638,  для отображения на экране сообщений о смерти сталкеров. Вот что получилось: http://s019.radikal.ru/i601/1606/5d/05dda1fdb5cb.png  Подскажите пожалуйста  как исправить, чтобы правильно отображалось. 

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

Кидать эти сообщения в некий буфер, добавляя туда сведения о времени, когда сообщение заброшено в этот буфер.

А на апдейте (можно не каждом, а раз в сколько-то секунд), перебирать этот буфер, достаточно старые сообщения выводить на экран и удалять из буфера.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

 

 

Подскажите пожалуйста, можно ли сделать, чтобы сообщение о смерти сталкеров приходили не мгновенно, а с задержкой. Если да, то как?

 

Очень просто. У news_manager.send_tip() есть параметры, один из них  - задержка отправки с секундах( игрового времени или реального не помню). Один минус - сообщения будут без звука но это легко компенсировать добавляя play_snd_no_feedback() или что-то подобное...

 

Или перепеши send_tip под себя...

 

Ну итог - ничего сложного нет :)

  • Спасибо 1

Не соответствует правилам.

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

Добрый вечер. В каком файле, по возможности можно указать и функцию, происходит открытие другого меню, например при нажатии "Опции" или "Титры"? 

З.ы. Поковыряв AMK, так и не нашел, как у них сделано открытие нового меню, с опциями.

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

 

 

чтобы сообщение о смерти сталкеров приходили не мгновенно, а с задержкой.

Просто не использовать этот скрипт. 

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

Очень просто. У news_manager.send_tip() есть параметры, один из них  - задержка отправки с секундах.

Подскажите пожалуйста, если можно, где здесь строка отвечающая за этот параметр.

 

function send_tip(actor, news_id, timeout, sender, showtime, sender_id)

if news_id == nil then return false end

 

printf("try to send tips for [%s]", tostring(sender_id))

if sender_id ~= nil then

local sim = alife()

if sim ~= nil then

local npc = sim:story_object(sender_id)

if npc ~= nil then

if npc.online then

--в онлайне проверяем на раненность

if xr_wounded.is_heavy_wounded_by_id(npc.id) then

printf("[PDA]Cannot send tips [%s], sender is heavy wounded", tostring(news_id))

return false

end

end

-- в других случаях только на смерть

if npc:alive() == 1 then

printf("[PDA]Cannot send tips [%s], sender is dead", tostring(news_id))

return false

end

end

end

end

 

if timeout == nil then timeout = 0 end

if showtime == nil then showtime = 5000 end

 

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

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

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

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

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

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

Войти

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

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

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