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

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


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

Здравствуйте ВАМ. А можно сделать некую точку (space_restrictor) без редактирования ал_спавна. Если кто знает, помогите если есть желание. Все способы с ACDC у меня кромешным крахом полнятся.

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

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

@nego

На этом форуме есть инфа по спавну ресрикторов без помощи all.spawn.

Четвёртый пост там смотри.

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

Ранее был известен под ником BoBaH_671.

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

Имеется множество рестрикторов со следующими секциями логики: 

[logic]
active = sr_particle@dynamic_flame_off

[sr_particle@dynamic_flame_off]
name = alex_mod\dynamic_flame\line\dynamic_flame_line_2_static
path = dynamic_flame_line_2
mode = 2
looped = true
on_info = {+actor_in_flame_zone} sr_particle@dynamic_flame_on

[sr_particle@dynamic_flame_on]
name = alex_mod\dynamic_flame\line\dynamic_flame_line_2_active
path = dynamic_flame_line_2
mode = 2
looped = false 

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

 

upd. Разобрался самостоятельно. Не заметил, что схема поддерживает 

on_signal = particle_end | *какое-то действие*

по аналогии с sr_sound.

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

Вот схватил вылет на Дикой территории: 

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CModelPool::Instance_Create
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrRender\ModelPool.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : Unknown visual type
 

stack trace:

Что это может быть? Что-то не так с визуалом НПЦ?

RafMadMan.gif

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

Сделал два диалога. Для теста присвоил их Сидоровичу.

Проблема в том что данные диалоги не появляются.  :russian_ru:

Вот два скелета диалога:

 

 

<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
 <dialog id="nl_dialog_bar_voronin">
    <has_info>nl_dialog_bar_voronin</has_info>
    <dont_has_info>nl_dialog_bar_voronin</dont_has_info>
    <phrase_list>
        <phrase id="0">
            <text>nl_dialog_bar_voronin_0</text>
            <next>1</next>
        </phrase>
        <phrase id="1">
            <text>nl_dialog_bar_voronin_1</text>
            <next>2</next>
            <next>3</next>
        </phrase>
        <phrase id="2">
            <text>nl_dialog_bar_voronin_2</text>
            <give_info>nl_dialog_bar_voronin</give_info>
            <action>nl_group.nl_actor_set_dolg</action>
        </phrase>
        <phrase id="3">
            <text>nl_dialog_bar_voronin_3</text>
            <action>dialogs.break_dialog</action>
        </phrase>
    </phrase_list>
</dialog>
 
 <dialog id="nl_dialog_millitary_lukash">
    <has_info>nl_dialog_millitary_lukash</has_info>
    <dont_has_info>nl_dialog_millitary_lukash</dont_has_info>
    <phrase_list>
        <phrase id="0">
            <text>nl_dialog_millitary_lukash_0</text>
            <next>1</next>
        </phrase>
        <phrase id="1">
            <text>nl_dialog_millitary_lukash_1</text>
            <next>2</next>
            <next>3</next>
        </phrase>
        <phrase id="2">
            <text>nl_dialog_millitary_lukash_2</text>
            <give_info>nl_dialog_millitary_lukash</give_info>
            <action>nl_group.nl_actor_set_freedom</action>
        </phrase>
        <phrase id="3">
            <text>nl_nl_dialog_millitary_lukash_3</text>
            <action>dialogs.break_dialog</action>
        </phrase>
    </phrase_list>
</dialog>
</game_dialogs>

 

 

Вот инфопоршни:

<?xml version='1.0' encoding="windows-1251"?>
<game_information_portions>
<info_portion id="nl_dialog_bar_voronin"></info_portion>
<info_portion id="nl_dialog_millitary_lukash"></info_portion>
</game_information_portions>

Вот я прописал диалоги Сидоровичу:

<?xml version='1.0' encoding="windows-1251"?>
 
<xml>
<specific_character id="escape_trader" no_random = "1">
<name>escape_trader_name</name>
<icon>ui_npc_u_trader</icon>
<bio>escape_trader_bio</bio>
 
<class>trader</class>
<community>trader</community>
<visual>actors\trader\trader</visual>
 
<rank>330</rank>
<reputation>23</reputation>
<money min="100000" max="100000" infinitive="1"/> 
<supplies>
[spawn] \n
wpn_knife \n
</supplies>
 
<start_dialog>escape_trader_start_dialog</start_dialog>
<actor_dialog>escape_trader_talk_info</actor_dialog>
<actor_dialog>escape_trader_jobs</actor_dialog>
<actor_dialog>tm_trader_dialog</actor_dialog>
<actor_dialog>tm_trader_reward</actor_dialog>
<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>
<actor_dialog>nl_dialog_bar_voronin</actor_dialog>
<actor_dialog>nl_dialog_millitary_lukash</actor_dialog>
</specific_character>

Вот функции вступления в группировку:

function nl_actor_set_dolg (actor, npc)
printf ("ACTOR NOW IN ACTOR_DOLG COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_dolg", 0, 0)
end
return true
end
 
function nl_actor_set_freedom (actor, npc)
printf ("ACTOR NOW IN ACTOR_FREEDOM COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_freedom", 0, 0)
end
return true
end

Можете ли подсказать где я допустил ошибку?

NL-Vincenz.gif

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

@NL-Vincenz

<has_info>nl_dialog_bar_voronin</has_info>
<dont_has_info>nl_dialog_bar_voronin</dont_has_info> 

Взаимоисключающие условия. То же самое во втором диалоге.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@Kirgudu, Спасибо! Диалог появился, работает.

Но данная функция:

 

 

function nl_actor_set_dolg (actor, npc)
printf ("ACTOR NOW IN ACTOR_DOLG COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_dolg", 0, 0)
end
return true
end
 
function nl_actor_set_freedom (actor, npc)
printf ("ACTOR NOW IN ACTOR_FREEDOM COMMUNITY"
if db.actor then
db.actor:set_character_community ("actor_freedom", 0, 0)
end
return true
end

 

 

Почему-то не работает. ГГ не перемещается в группировку в зависимости от выбранного диалога.

NL-Vincenz.gif

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

@NL-Vincenz, почему-то мне кажется, что данный вопрос относится не к ТЧ, а всё-таки к ЧН. Если это так, прошу подтвердить - перенесу посты в соответствующую тему.

Ну а если речь действительно о ЧН, то необходимо не только установить группировку ГГ, но и в свойствах самой группировки обозначить, что она - группировка игрока.

Делается это комплексным методом симуляции sim_board:set_actor_community() примерно так:

sim_board.get_sim_board():set_actor_community("dolg")
Ссылка на комментарий

@Kirgudu, Нет, это ТЧ. Функцию нашел на просторах интернета.  :)

Добавлено Kirgudu,

Хм... Я, конечно, с ТЧ не работал, только с ЧН, но разве в ТЧ есть группировки? Точнее, разве в них можно вступить?

Ладно, возможно кто-то более сведущий тут поможет.

NL-Vincenz.gif

Ссылка на комментарий
ГГ не перемещается в группировку в зависимости от выбранного диалога.

В ф-циях вроде ошибки нет, соответствуют прототипам из оригинала(если конечно отсутствие скобки в строке "printf ("ACTOR NOW IN ACTOR_DOLG COMMUNITY"здесь должна быть закрывающая скобка" просто ошибка копи\пасты). Соответственно вопрос - а ты уверен, что ф-ции вызываются из диалога ? Вставь в тело каждой обычную выдачу сообщения, типа

local text = "идем в Долг"
news_manager.send_tip(db.actor, text, nil, nil, 30000)

сделай проверку.

Изменено пользователем UnLoaded
Добавлено Kirgudu,

Да-да, меня тоже отсутствие скобок после printf смутило. Но автор не писал о каких-либо вылетах - только о невступлении.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

@NL-Vincenz, а действительно, проверь наличие закрывающих скобок. Вполне возможно, что из диалога вылета не будет, но и функция не запустится.

  • Спасибо 1
Ссылка на комментарий

В приведенной ниже схеме очень странно проигрывается прописанный звук - многократно повторяясь, с сильным эффектом эхо. Отмечу сразу, что проблема не в самом файле, т.к. он, как и все используемые мной звуки имеет валидные OGG комментарии, да и подмена на любой другой, проблемы не решает. ЕАХ тут так-же не виноват.

Корректно звук проигрывается только при установке on_value = 9 - но это по сути конец отсчета, гг уже мертв.

[logic]
active = sr_idle@biohazard_start_timer

[sr_idle@biohazard_start_timer]
on_info = {+lab_x7_ventilation_system_worked} nil
on_timer = 4000 | sr_idle@biohazard_start

[sr_idle@biohazard_start]
on_actor_inside = %=lab_x7_biohazard_check_actor_outfit% {-lab_x7_actor_have_bioprotection_outfit} sr_timer@no_bioprotection_outfit, %=lab_x7_biohazard_check_actor_outfit%
{+lab_x7_actor_have_bioprotection_outfit} sr_timer@with_bioprotection_outfit

[sr_timer@no_bioprotection_outfit]
type = dec
start_value = 156000
on_value = 9000 | %=play_snd(actor\breath_1)% | 0 | nil %=aes_kill_actor%
on_actor_outside = sr_idle@biohazard_start
on_info = {+lab_x7_ventilation_system_worked} nil
string = lab_x7_biohazard_attention

[sr_timer@with_bioprotection_outfit]
type = dec
start_value = 241000
on_value = 9000 | %=play_snd(actor\breath_1)% | 0 | nil %=aes_kill_actor%
on_actor_outside = sr_idle@biohazard_start
on_info = {+lab_x7_ventilation_system_worked} nil
string = lab_x7_biohazard_attention
Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

,

on_value при type = dec срабатывает, если текущее значение меньше или равно установленного (соответственно, при type = inc - если больше или равно).

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

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

Примерно так (судя по скриптам, должно работать):

on_value = 9000 | {-stop_breath} %=play_snd(actor\breath_1) +stop_breath% | 0 | nil %=aes_kill_actor%

А хотя нет, там будет чуть сложнее. Надо, чтобы он дышал постоянно, но не часто.

Тут надо подумать, но направление мыслей я тебе дал.

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

@Kirgudu, я так понимаю, необходимо что-то вроде этого?

on_value = 9000 | {-biohazard_actor_death_breath_snd} %=play_snd(actor\breath_1) +biohazard_actor_death_breath_snd% | 0 | nil %=aes_kill_actor%

См. выше дополнение. Это примерно то, что нужно, но не совсем, так как звук проиграется только один раз. Это, конечно, устроит, если он длиной 9000. А если меньше, надо будет доработать. Kirgudu

 

Мне именно это и нужно. Время до конца отсчета согласуется с длинной звукового файла. Твое дополнение сверху не заметил.

 

Еще кое-что. На левеле бродят заспавненные крысы, с единой для всех логикой: 

[smart_terrains]
none = true

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

Городить что-то монструозное, вроде: убили - выдать инфопорцию, запустить таймер - по окончании, при условии отсутствия ГГ на локации, заспавнить через [spawner] - так же не хочется.

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

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

 

 

Как бы возрождать только убитых, по имени в спавне, с той же логикой, через n-ое кол-во часов, при условии

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

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

Уважаемые форумчане, те кто прошел этот тернистый путь -поделитесь примером использования CUIScrollView и добавлением в него своих CUIStatic... на данный момент собственные потуги

--inventory_scroll - CUIScrollView 400x300 например
local section="vodka"
local x = system_ini():r_u32(section, "inv_grid_x")*50
local y = system_ini():r_u32(section, "inv_grid_y")*50
local w = system_ini():r_u32(section, "inv_grid_width")*50
local h = system_ini():r_u32(section, "inv_grid_height")*50
local static=CUIStatic()
static:SetWindowName(section)
static:SetAutoDelete(true)
static:InitTexture("ui\\ui_icon_equipment")
static:SetOriginalRect(x, y, w, h)
static:SetStretchTexture(true)
static:Init(x,y,w/2,h/2) --нужно ли это делать для контрола внутри скролла?
inventory_scroll:AddWindow(static,true)
inventory_scroll:ScrollToBegin() 
 

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

0023:05809A68 xrGame.dll

0023:05728D22 xrGame.dll
0023:05728D22 xrGame.dll
0023:057285D8 xrGame.dll
0023:057285D8 xrGame.dll
0023:05739C5D xrGame.dll
0023:00637041 xrLUA.dll, luabind::detail::get_class_name()
0023:0063E918 xrLUA.dll, luabind::detail::class_rep::function_dispatcher()
0023:0061A772 xrLUA.dll, lua_getinfo()
0023:00612115 xrLUA.dll, lua_call()
0023:0061AB08 xrLUA.dll, lua_yield()
0023:00643AF1 xrLUA.dll, luabind::detail::pcall()

Благодарю за помощь!
 
может водку рисовать только с колбасой и батоном вместе надо? отдельно нельзя!!!!

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

@UnLoaded, Сделал проверку, функция не вызывается из диалога.  :blink:

Столкнулся с таким впервые. Скелет диалога в порядке вроде.  :russian_ru:

У меня ГГ в вояки переходит

-- Вступление в Вояки

function actor_set_military(actor, npc)

printf("ACTOR NOW IN [MILITARY] COMMUNITY")

if db.actor then

db.actor:set_character_community("military", 0, 0)

end

return true

end

 

группировка в квадратных скобках. Попробуй так:

 

function nl_actor_set_dolg (actor, npc)

printf ("ACTOR NOW IN [ACTOR_DOLG] COMMUNITY")

if db.actor then

db.actor:set_character_community ("actor_dolg", 0, 0)

end

return true

end

 

function nl_actor_set_freedom (actor, npc)

printf ("ACTOR NOW IN [ACTOR_FREEDOM] COMMUNITY")

if db.actor then

db.actor:set_character_community ("actor_freedom", 0, 0)

end

return true

end

 

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

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

@UnLoaded, респавн не подходит для данного случая, т.к. в его обязательные условия входит:

1. На локации обязательно должен быть хоть один гулаг для респавнящихся NPC и мутантов, так как количество NPC для респавна, ориентируется по доступным местам в гулагах.
2. Респавн производится, только если под гулагами есть доступные работы.

 

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

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

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

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

, Стесняюсь спросить, а что мешает допустим при каждом входе актора на уровень, проверить сколько на этой локации крыс, и доспавнить скриптом рандомно по локации недостающее количество?

 

У меня вопрос такого характера. Есть в папке sounds энное число файлов по разным папкам. Есть подозрение что какие-то из них не были прогнаны через СДК, т.е. в них не хватает каких-то необходимых для игры данных. среди прочего это приводит к вылетам при обращении игры к этим файлам.

каким инструментом можно вычислить все файлы нуждающиеся в обработке?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

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

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

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

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

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

Войти

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

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

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