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

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

 
 

condition_progress_bar="1"></dragdrop_belt>

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

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

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


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

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


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

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


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

Policai Никак. Статику только перекомпилировать. Через level cdc можно только пары текстура-шейдер менять, да источники света и глоу.


Kalambur actor_menu***.xml

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

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

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


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

День добрый. Как сделать так, чтобы когда подходишь к НПС, он тебя не приветствовал? Потому что у меня НПС спит, но при этом еще и приветствует, когда ГГ подходит к нему. И есть ли функция спавна предмета на точке пути, через скрипты?

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


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

День добрый. Как сделать так, чтобы когда подходишь к НПС, он тебя не приветствовал? Потому что у меня НПС спит, но при этом еще и приветствует, когда ГГ подходит к нему. И есть ли функция спавна предмета на точке пути, через скрипты?

Добавить в meet:
close_snd_hello = nil
close_snd_bye = nil

Спавн объекта:

=spawn_object(id_объекта:путь_way)
Через скрипт:
spawn_object(actor, nil, {"id_объекта","путь_way"})

  • Лайк 1
  • Спасибо 1

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


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

Доброго времени суток, решил на днях вспомнить былое и попробовать сделать "васянку" для личного удовольствия.
В общем, мои вопросы:
- Есть ли версии ТЧ 1.0006 с полностью вырезанным сюжетом? (Если да, то где их достать)
- С чего лучше начать при создании мода на платформе Call of Chernobyl? (Каким образом лучше распаковать архивы и какую версию выбрать)


Заранее спасибо!

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


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

Доброго дня. Понимаю, что вопрос дилетантский, но, похоже, я просто что-то не вижу. Суть в следующем - у непися есть 2 стартовых диалога:

Спойлер

...профиль...

<start_dialog>gorodok_captain_catch_start</start_dialog>
        <start_dialog>gorodok_captain_catch_forest</start_dialog>
        <actor_dialog>actor_break_dialog</actor_dialog>
    </specific_character>

Диалоги выглядят таким образом:

Спойлер

<dialog id="gorodok_captain_catch_start">
        <dont_has_info>gorodok_captain_catch_talked</dont_has_info>    
        <has_info>black_valley_sosed_quest_talked</has_info>
        <phrase_list>
            <phrase id="0">
                <text>gorodok_captain_catch_start_00</text>
                <next>1</next>
            </phrase>
           ...Диалог...
            <phrase id="7">
                <text>gorodok_captain_catch_start_07</text>
                <give_info>gorodok_captain_catch_talked</give_info>
                <action>dialogs.break_dialog</action>
            </phrase>
        </phrase_list>
    </dialog>

 

<dialog id="gorodok_captain_catch_forest">
        <dont_has_info>gorodok_captain_catch_forest_talked</dont_has_info>    
        <has_info>gorodok_captain_catch_talked</has_info>    
        <phrase_list>
            <phrase id="0">
                <text>gorodok_captain_catch_forest_00</text>
                <next>1</next>
            </phrase>
           ...
            <phrase id="11">
                <text>gorodok_captain_catch_forest_11</text>    
                <give_info>gorodok_captain_catch_forest_talked</give_info>
                <action>dialogs.break_dialog</action>
            </phrase>
        </phrase_list>
    </dialog>

И идут один за другим таким образом, что сначала проигрывается 1-й, потом сразу же происходит перенос неписей в другое место путём удаления-создания соотв. отряда и, по замыслу, должен проигрываться 2-й, но он по каким-то причинам не проигрывается. Не пойму, в чем проблема. Инфопоршни, вроде, внятные. Возможно, что-то не вижу.

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


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

Каким образом в игру добавляется озвучка? Я хочу добавить в игру анекдот, озвучка есть.

Какой файл нужно редачить?

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


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

svi_042 В чем необходимость двух start_dialog? Как вы их подключаете в логике?

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

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

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


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

Каким образом в игру добавляется озвучка? Я хочу добавить в игру анекдот, озвучка есть.

Какой файл нужно редачить?

Тоже интересует. И есть ли нюансы/ограничения?

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


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

Как заспавнить объект с прописанной логикой способом alife():create?

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


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

denis2000 необходимость в том, чтобы непись начинал разговор первым, т.е., таким образом:

Спойлер

[meet@gorodok_captain] 
close_anim = nil 
close_victim = nil 
far_anim = nil 
far_victim = nil 
close_distance = 0 
far_distance = 0 
use = {=dist_to_actor_le(10.0)} self, true
trade_enable = false
allow_break = false 
close_snd_distance = 1 
meet_on_talking = false

 

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


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

liner Логика в кастом дате, в секции объекта.

Спойлер

[jup_b8_actor_visual_stalker]:actor_visual_stalker
...
custom_data            = scripts\jupiter\jup_b8_actor_visual_stalker.ltx

alife():create("jup_b8_actor_visual_stalker",....)

 

 


svi_042 Значит используйте пареметр meet_dialog.


3 часа назад, Misery сказал:

Какой файл нужно редачить?

В такой редакции никаких файлов редактировать не нужно просто добавьте звуковой файл в папку/и gamedata\sounds\characters_voice\human_0*\***\talk\jokes с соотвествующим именем joke_***.ogg


1 час назад, Питбуль сказал:

И есть ли нюансы/ограничения?

Все зависит от конкретных задач...

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

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

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


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

Сработает ли функция =create_squad, если попытаться создать отряд на другой локации? Есть ли иные способы создания сквадов на локациях, на которых отсутствует игрок?

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


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

Сработает ли функция =create_squad, если попытаться создать отряд на другой локации?

Если учесть, что именно эта функция используется в начале игры для заселения всех смартов, то очевидный ответ - да!

  • Мастер! 1

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

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


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

Как можно реализовать звуки при поднятий предметов?

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


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

Метод on_item_take в bind_stalker.script, это раз. Во-вторых, в интернете информация по этому поводу пылится уже несколько лет. Например, тут. Пусть это и для ТЧ, принцип более чем понятен. Адаптируется очень легко.


c01570bf2e07524.png

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


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

Подскажите по методу: set_npc_position для объектов. Он для всех, совсем всех?( и  живых и мертвых?). Смущает в исходниках строка: obj->movement().detail().make_inactual(); Получается только для монстров и сталкеров? А вот жив он или нет - не важно?

Я далеко не копал.Может кто-нибудь прояснить сей момент?

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


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

Буквально на днях столкнулся со следующей проблемой: симуляционные НПС, находящиеся в смарт каверах (любых, будь то sit_normal или sit_knee) никак не реагируют на происходящее вокруг них. Перестрелка, нападение, пробегающий рядом мутант - всё это они игнорируют, в отличии от неписей, выполняющих другие работы, например, guard или walk. Даже будучи раненным такой непись остается сидеть в анимке, хотя с ним и можно завести диалог и дать ему аптечку.

 

Перебрал связанные со смартами и каверами скрипты, конфиги, поискал в гугле, но так и не нашел никаких зацепок. Народ, кто-то сталкивался с чем-то подобным? Возможно ли, что этот баг с оригинального ЗП тянется?

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


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

Stgs Файл gulag_general.script код ниже метки XR_ANIMPOINT:

if smart.base_on_actor_control ~= nil and
	smart.base_on_actor_control.ignore_zone ~= nil
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"
end

Вывод: Если на смрте есть параметр smart_control, указывающий на соответсвующую секцию, в которой есть параметр ignore_zone, определяющий рестриктор в котором НПС должен инорировать бой, то НПС, занявший неэксклюзивную работу на смарте в смартковере, будет вести себя именно так как вы и описали.


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

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


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

denis2000, такой параметр на смарте отсутствует. Стоит также отметить, что на смарте нет каких-либо рестрикторов, а сам баг вылезает вне зависимости от типа смарта (default_territory, default_base). Более того, данный код в gulag_general.ltx я находил и даже пробовал комментировать с целью проверить: исправиться ли ошибка. Однако, никаких результатов это не принесло. В конце концов, разве не должен непись при ранении падать в соответствующую анимацию?

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

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


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

@makdm, на основе   этого   сообщения я попытался восстановить боевые смарт ковры. Появился вопрос: а как заставить
НПС перестреливаться с противником из боевого ковра, если он находится в нём?

 

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


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

В конце концов, разве не должен непись при ранении падать в соответствующую анимацию?

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

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


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

-- Умер сталкер
function npc_on_death(npc)
        local rnd_value = math.random(1,99)
                if rnd_value > 50 then return end

        local rank = ranks.get_obj_rank_name(npc)
        local comm = npc:character_community()
        local coef = get_comb_coeff(rank,comm)^0.5
        local visual = npc:get_visual_name()
        local outfit_section, helmet_section = get_outfit_sections(visual)
        
        if (axr_main.config:r_value("mm_options","enable_outfit_maradeur",1,false)) then
        
            if outfit_section then
                local se_outfit = alife():create(outfit_section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())
                curent_outfit[se_outfit.id] = coef
                update_outfit()
            end
            if helmet_section then
                local se_helmet = alife():create(helmet_section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())
                curent_helmet[se_helmet.id] = coef
                update_helmet()
            end
        end
end

-- Получим секцию брони и шлема
function get_outfit_sections(visual)
        local s_name = alun_utils.str_explode(visual,"\\")
        local v_name = s_name[3]
        local t_vis = visuals[v_name]
        if t_vis then
            return t_vis[1], t_vis[2]
        end
end

-- update
function update_outfit()
    local function actor_on_update()
    local param = false
        for k,v in pairs(curent_outfit) do
        local outfit_obj = level.object_by_id(k)
            if outfit_obj then
            outfit_obj:set_condition(mean_random(10,50,v,1)/100)
            curent_outfit[k] = nil
            param = true
            elseif param == true then
            UnregisterScriptCallback("actor_on_update",actor_on_update)
            return
            end
        end
    end
RegisterScriptCallback("actor_on_update",actor_on_update)
end

function update_helmet()
    local function actor_on_update()
    local param = false
        for k,v in pairs(curent_helmet) do
        local helmet_obj = level.object_by_id(k)
            if helmet_obj then
            helmet_obj:set_condition(mean_random(10,50,v,1)/100)
            curent_helmet[k] = nil
            param = true
            elseif param == true then
            UnregisterScriptCallback("actor_on_update",actor_on_update)
            return
            end
        end
    end
RegisterScriptCallback("actor_on_update",actor_on_update)
end

--утилиты
function mean_random(index_min,index_max,mean_index,left_power,right_power,flag)
        local index_mean = mean_index or 0
        if (index_mean >= 0) and (index_mean <= 1) then
            index_mean = (index_max-index_min)*index_mean + index_min
            local mean_down, mean_up = math.floor(index_mean), math.ceil(index_mean)
            local d_mean_down, d_mean_up = index_mean - mean_down, mean_up - index_mean
            if d_mean_down == d_mean_up then
                index_mean = (math.random(0,1) == 1) and mean_down or mean_up
            else
                index_mean = (d_mean_down > d_mean_up) and mean_up or mean_down
            end
        end
        local power_left = left_power or 1
        local power_right = right_power or power_left
        local coeffs_list = {}
        local coeffs_total = 0
        local coeff = 0
        local power = 0
        local base = 0
        local shift = math.max(index_mean-index_min,index_max-index_mean) + 1
        for i=index_min,index_max do
            base = shift - math.abs(index_mean - i)
            if i < index_mean then
                power = power_left
            elseif i == index_mean then
                power = math.max(power_left,power_right)
            else
                power = power_right
            end
            coeff = base^power
            coeffs_list = coeff
            coeffs_total = coeffs_total + coeff
        end
        local rnd = math.random(1,coeffs_total)
        for i=index_min,index_max do
            if rnd <= coeffs_list then
                return i
            end
            rnd = rnd - coeffs_list
        end
end


function get_comb_coeff(rank,comm)
        local rank_coeffs_table = {novice = 1, trainee = 1, experienced = 1, professional = 1, veteran = 1, expert = 1, master = 1, legend = 1}
        local comm_coeffs_table = {zombied = 1, ecolog = 1, bandit = 1, freedom = 1, stalker = 1, clearsky = 1, dolg = 1, killer = 1, army = 1, monolith = 1}
        local rank_coeff = rank_coeffs_table[rank] or 0
        local comm_coeff = comm_coeffs_table[comm] or 0
        return rank_coeff * comm_coeff

end

Подскажите пожалуйста, как изменить выпадение комбезов с шанса 100% на 50% ?

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

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


Ссылка на сообщение
Поделиться на другие сайты
 
12 минут назад, Kalambur сказал:
  функция (Скрыть контент)


                if rnd_value > 50 then return end

 

Подскажите пожалуйста, как изменить выпадение комбезов с шанса 100% на 50% ?

Думаю, что причина в этом.  Если число больше 50, то эта строка завершает работу.  А если меньше, то ничего не делает.

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

 

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


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

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

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

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

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

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

Войти

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

Войти

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