Перейти к содержанию

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

 
 

Возможно вытащить текстуру из ПАРТИКЛА артефакта?

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


Ссылка на сообщение
Поделиться на другие сайты
 

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

Изменено пользователем denis2000
  • Лайк 2
  • Мастер! 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Misery А посмотреть на какие текстуры ссылается партикл можно в ParticleEditor

 

  • Жму руку 2

Группа мода в VK
Мод делался и тестировался на железе
i5-11400, 32Гб ОЗУ, Radeon RX580  Разрешение 2560 х 1440.  ВСЕ на максималке

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


Ссылка на сообщение
Поделиться на другие сайты
 
Спойлер

[quest_test_give251]
icon = ui_inGame2_Karti_mestnosti
prior = 2
storyline = false
title = {=actor_has_item(letter_stalker_letter_7) =actor_has_item(letter_stalker_letter_8) =actor_has_item(letter_stalker_letter_10) =actor_has_item(letter_stalker_letter_9)}test2-251, test1-251
descr = test3-251
target = {=actor_has_item(letter_stalker_letter_7) =actor_has_item(letter_stalker_letter_8) =actor_has_item(letter_stalker_letter_10) =actor_has_item(letter_stalker_letter_9)} esc_m_trader
condlist_0 = {+quest_test_done251} complete, {+esc_m_trader_death} fail
condlist_1 = {+quest_test_proval251} fail
on_complete = %=reward_random_money(2000:3000) =complete_task_inc_goodwill(50:stalker)%

подскажите пожалуйста, как и перед чем поставить метку на например на leter_stalker_leter_7 или рюкзак6 в котором она спавнется вместе с рюкзаком6, читал инфу как метку ставить, вроде легко, но пробовал поразному и не получаеться !?

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

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


294404326_-1.png.b174b8675b96f1eea9aed038584779b1.png

                    Паблик ВК       

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


Ссылка на сообщение
Поделиться на другие сайты
 

Kalambur Объект на который будет установлена метка этого задания указан в параметре target. По сути это кондлист:

target = {условие установки метки} стори_ид_объекта, ...

 


Stepan_sovok1917 Логика рестриктора:

[logic]
active = sr_idle@waiting_1

[sr_idle@waiting_1]
on_game_timer = 200 | sr_idle@waiting_1 %=Первая_функция%

[sr_idle@waiting_2]
on_game_timer = 400 | nil %=Вторая_функция%

on_game_timer = 200 - время в игровых секундах.
on_timer = 2000 - время в реальных миллисекундах.

Изменено пользователем denis2000
  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

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

На видео анимация эффекта и телепортация начинаются одновременно, поэтому мы видим, что анимация играет после телепортации. Если телепортировать игрока через 1 секунду после начала эффекта, то мы увидим красивую картинку. Телепортация будет происходить когда экран чёрный и игрок её не увидит. Вопрос: как?


294404326_-1.png.b174b8675b96f1eea9aed038584779b1.png

                    Паблик ВК       

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


Ссылка на сообщение
Поделиться на другие сайты
 

Stepan_sovok1917 Начните с понимания, что такое рестриктор и как его используют. А далее четко ставим техзадачу и средства ее реализации. Видео прикольное, но информации ноль.

Задать задержку выполнения функции можно методом level.add_call :
 

local end_of_timer = time_global() + 2000 --Задержка 2000 мс
level.add_call(
				function()
					if end_of_timer < time_global() then
						return true
					end
				end,
				function()
					.....
				end
				)

lua_help.script
 

Цитата

namespace level {
       ...
        function add_call(const function<boolean>&, const function<void>&);

где function<boolean>& - функция которая должна вернуть true, для того чтобы выполнилась функция function<void>&

 

Изменено пользователем denis2000
  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Всем привет. Как увеличить время исчезновения декалей (крови, например)?

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


Ссылка на сообщение
Поделиться на другие сайты
 
2 часа назад, denis2000 сказал:

Задать задержку выполнения функции можно методом level.add_call :
 


local end_of_timer = time_global() + 2000 --Задержка 2000 мс
level.add_call(
				function()
					if end_of_timer < time_global() then
						return true
					end
				end,
				function()
					.....
				end
				)

Большое спасибо, теперь всё выглядит так:

 


294404326_-1.png.b174b8675b96f1eea9aed038584779b1.png

                    Паблик ВК       

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


Ссылка на сообщение
Поделиться на другие сайты
 

Может кому и пригодится.
 

Спойлер

Эта правка позволяет симуляционным НПС занимать смарткаверы во время выброса.
В скрипте gulag_general в блоке -- SURGE -- после
if it > 1 then table.insert(stalker_jobs.jobs, stalker_surge) end
вставить:

                local stalker_cover = {_prior = 50, jobs = {}}
                it = 1
                while se_smart_cover.registered_smartcovers[gname.."_ap_field_"..it] ~= nil do
                        -- Необходимо вычитать количество работ из названия точки пути.
                        local smartcover_name = gname.."_ap_field_"..it

                        -- добавляем должность
                        t = {   _prior = 50,
                                job_id = { section = "logic@"..smartcover_name,
                                             job_type = "smartcover_job" },
                                _precondition_params = { },
                                _precondition_function =   function(se_obj, smart, precond_params)
                                                                return xr_conditions.surge_started()
                                                            end
                                }
                        table.insert(stalker_jobs.jobs, t)
                        local cvrs_swall =
                        {
                        "esc_a1_ap_field_1",
                        "esc_a1_ap_field_3",
                        "esc_a2_ap_field_1"
                        }

                        -- добавляем описание должности в лтх.
                        local job_ltx = "[logic@"..smartcover_name.."]\n"..
                                        "active = walker@ap_field_"..it.."_walk\n"..
                                        "on_combat = combat_surge\n"..
                                        
                                        "[walker@ap_field_"..it.."_walk]\n"..
                                        "path_walk = ap_field_"..it.."_walk\n"..
                                        "sound_idle = state\n"..
                                        "meet = meet@generic_surge\n"..
                                        "cover_name = "..smartcover_name.."\n"..
                                        "on_signal = in_ap_field| animpoint@"..smartcover_name.."\n"..
                                        "def_state_moving = sprint \n"..

                                        "[animpoint@"..smartcover_name.."]\n"..
                                        "sound_idle = state\n"..
                                        "meet = meet@generic_surge\n"..
                                        "cover_name = "..smartcover_name.."\n"

                        if smart.def_restr ~= nil then
                            job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
                        end
                        
                        for k,v in pairs(cvrs_swall) do
                            if smartcover_name == v then
                                job_ltx = job_ltx.."avail_animations = animpoint_stay_wall\n"
                            end
                        end

                        if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
                            job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
                        end

                        if smart.base_on_actor_control ~= nil and smart.base_on_actor_control.ignore_zone ~= nil and xr_gulag.job_in_restrictor(smart, smart.base_on_actor_control.ignore_zone, way_name) then
                            job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
                                                "combat_ignore_keep_when_attacked = true \n"
                        else
                            job_ltx = job_ltx .."combat_ignore_cond = {=dist_to_job_point_ge(5)} false, {=is_enemy_actor =fighting_dist_ge(50)} true, {=fighting_dist_ge(15)} true, false \n"..
                                                "combat_ignore_keep_when_attacked = true \n"
                        end

                        ltx = ltx..job_ltx
                        it = it + 1
                end
                if it > 1 then table.insert(stalker_jobs.jobs, stalker_cover) end

Пояснения:
Для чего нужна таблица cvrs_swall?
-------------------------------------------------------------------
Для того, чтобы у стоящего в смарткавере НПС не дёргалась нога, если у него есть оружие. По желанию можно не записывать туда имя смарткавера.
-------------------------------------------------------------------
Как использовать?
-------------------------------------------------------------------
В СДК добавляем вэйпоинт, и даём ему название вида: имя_смарта_ap_field_номер_вэйпоинта_walk
Далее в настройках вэйпоинта ставим галочку на 0, и вместо wp00 пишем "wp00|sig=in_ap_field"
Пример: esc_a2_ap_field_1_walk
ВНИМАНИЕ! СТАВИТЬ ВЭЙПОИНТ НАДО НА AI-СЕТКЕ И ПРЯМО В СМАРТКАВЕРЕ (если смарткавер находится не на ai-сетке, то поставить вэйпоинт рядом)!
Далее добавляем смарткавер, и даём ему название вида: имя_смарта_ap_field_номер_смарткавера. Назначаем анимацию в смартковере.
-------------------------------------------------------------------

 

Изменено пользователем liner
  • Лайк 1
  • Аплодисменты 1

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


Ссылка на сообщение
Поделиться на другие сайты
 

Можно ли вызвать сразу титры, без проигрывания финального ролика? Сразу титры.

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


Ссылка на сообщение
Поделиться на другие сайты
 
22 минуты назад, Крим сказал:

Можно ли вызвать сразу титры, без проигрывания финального ролика? Сразу титры.

game.start_tutorial("credits_seq")

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


Ссылка на сообщение
Поделиться на другие сайты
   
1 час назад, liner сказал:

Может кому и пригодится

Мне точно не пригодится. 

1.  on_combat = combat_surge  - Это что за байда? Где в ЗП  вы это видели?

2. Вы прописываете спринт на точку.  Не будут они спринтовать. Вот просто не будут...  в ЗП.

3. .....Дальше даже не буду писАть ввиду кучи непонятностей.

 


Терпение... И все получится.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Sidorovich, за время существования воллмарков отвечает консольная команда r__wallmark_ttl. Принудительное удлинение "жизни" подобного рода декалей можно реализовать при помощи движка, сдвинув крайнюю границу принимаемого значения в xrGame/console_commands.cpp либо же воспользоваться путём превращения переменной ps_r__WallmarkTTL в константу, увеличив её значение до этапа компиляции (от самой консольной команды в таком случае следует избавиться).

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


Ссылка на сообщение
Поделиться на другие сайты
 

makdm  Делал по аналогии с вэйпоинтами. У меня всё прекрасно работает, я тестировал.

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


Ссылка на сообщение
Поделиться на другие сайты
 
7 минут назад, liner сказал:

Делал по аналогии с вэйпоинтами. У меня всё прекрасно работает, я тестировал.

То, что у вас работает не говорит о том, что будет работать у всех.


Терпение... И все получится.

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


Ссылка на сообщение
Поделиться на другие сайты
 

кто знает как та анимка у монолитовца с гаусской что ещё с крыши падает называется.

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

OP_artovod Анимстейт pri_a17_pray_in.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 Спасибо, всё заработало. Но появился вопрос: как телепортировать НПС прямо перед актором? Надо ли вручную указывать координаты или есть способ эффективнее?

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


Ссылка на сообщение
Поделиться на другие сайты
 

А есть ли возможность сделать прикондишен, который проверял бы количество очков опыта героя или НПС? Тобишь есть НПС имеет ранг МАСТЕР, то кондишен дает  НПС возможность давать ГГ квест, в остальных случаях - нет

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


Ссылка на сообщение
Поделиться на другие сайты
 

Yura001 Получаете координаты ГГ, по ним ищите координаты ближайшего левел вертекса, тепортируете на них НПС. В коде выглядит примерно так:
 

function teleport_npc_to_actor(npc)
	npc:set_npc_position(level.vertex_position(db.actor:level_vertex_id()))
end

 


Дополнено 5 минуты спустя

Kamr4d Как то так:
 

ranks.get_obj_rank_name(npc) == "veteran"

 

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 

44 минуты назад, denis2000 сказал:

Kamr4d Как то так:
 


ranks.get_obj_rank_name(npc) == "veteran"

 

Благодарю, попробую

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


Ссылка на сообщение
Поделиться на другие сайты
 

Мне нужно, чтобы нпс стал врагом после получения инфопоршня. Как такое можно сделать?

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу