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

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

 
 

Всем привет. Помогите пожалуйста, что делать при такой ошибке?

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ....e.r. shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)


Дополнено 26 минуты спустя
3 часа назад, CIDOPOBICH сказал:

Всем привет. Помогите пожалуйста, что делать при такой ошибке?

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ....e.r. shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

Сейчас я заметил, что если убрать all.spawn из gamedata - всё работает. Ещё добавлю, (может это пригодится) я добавлял нового НПС на локацию

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


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

CIDOPOBICH 

Открываешь _g.script, в самом начале находишь функцию printf и заменяешь её на это:

function printf(fmt,...)
    logf_console = get_console()
    logf = logf_main
    logf_main(fmt, ...)
end
function logf_main(fmt, ...)
    local c = select("#", ...)
    if c <= 0 then -- nothing to format
        logf_console:execute(":" .. string.gsub(fmt, " ", "\160"))
    else
        logf_console:execute(":" .. string.gsub(string.format(fmt, ...), " ", "\160"))
    end
end

После вылета, смотришь лог и находишь его причину.

  • Жму руку 1

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


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

CIDOPOBICH 

Открываешь _g.script, в самом начале находишь функцию printf и заменяешь её на это:


function printf(fmt,...)
    logf_console = get_console()
    logf = logf_main
    logf_main(fmt, ...)
end
function logf_main(fmt, ...)
    local c = select("#", ...)
    if c <= 0 then -- nothing to format
        logf_console:execute(":" .. string.gsub(fmt, " ", "\160"))
    else
        logf_console:execute(":" .. string.gsub(string.format(fmt, ...), " ", "\160"))
    end
end

После вылета, смотришь лог и находишь его причину.

Спасибо, теперь работает!


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

Всем привет ещё раз! Кто знает, как сделать задание на убийство мутантов, которые должны бегать в определённой зоне (боксе)? Подскажите пожалуйста. Спасибо!

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


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

Дополнение. Я разобрался как сделать смарт террейн с мутантами, но проблема в том, что, придя на место, мутантов не было. Что делать?

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


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

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

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


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

macron Подкол засчитан) Спасибо за инструкцию, помогла!

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


Ссылка на сообщение
Поделиться на другие сайты
 
В 06.07.2024 в 10:23, CIDOPOBICH сказал:

Дополнение. Я разобрался как сделать смарт террейн с мутантами, но проблема в том, что, придя на место, мутантов не было. Что делать?

Значит неправильно сделал смарт. 

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


Дополнено 39 минуты спустя
В 05.07.2024 в 19:57, CIDOPOBICH сказал:

Всем привет ещё раз! Кто знает, как сделать задание на убийство мутантов, которые должны бегать в определённой зоне (боксе)? Подскажите пожалуйста. Спасибо!

Ну есть 2 варианта, со смартом и без.

1. Заспавнить мутанта. Потом создаешь спейс рестриктор. Далее в секции мутанта, находишь вот это окно 1426320435_2.PNG.c5bbd70a43c290223e39f19bd5e822bf.PNG И там выбираешь свой спейс рестриктор. И далее пишешь ему логику вот эту

[smart_terrains]
none = true

[logic]
active = mob_walker - 
on_death = death@boar_i

[mob_walker]
path_walk = swamp_lager_walker2_look
path_look = swamp_lager_walker2_walk 

[death@boar_i]
on_info = %+info%

Можешь не использовать схему walker, это я для примера показал. 

2. Для начала создаешь шейп, и создаешь в секции ai - smart_terrain  его и приатачиваешь к шейпу. Далее в логике смарта пишешь 

[smart_terrain]
type = esc_small_home4 - Название смарта
capacity = 2 Численность смарта

Далее создаешь мутанта и в логике его пишешь

[smart_terrains]
esc_small_home4 = true 

Ты привязываешь непися к смарту.

Далее заходим в scripts/gulag_имялокации

Если новую локация создал, то регистрируешь гулаг для локации.

И в гулаге пишешь

    if type == "esc_small_home4" then - Место esc_small_home4 пишешь свое имя смарта
        t = { section = "logic@esc_small_home4", - Работа 1
            idle = 0,
            prior = 5, state = {0},
            in_rest = "", out_rest = ""  - in_rest запрещено выходить, к примеру написал имя спейса, и нпс нельзя от туда выходить out_rest - куда запрещено входить. Так же пишешь имя зоны (спейса) и все.
        }
        table.insert(sj, t)
        t = { section = "logic@esc_small_home4", Работа 2
            idle = 0,
            prior = 5, state = {0}, prior - приоритет работы, если у этой работы приоритет больше, Сначала всегда нпс занимают более приоритетные работы.
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end

Далее в гулаге находишь вот это: 


function load_states(gname, type)

 

-------------------------------------------------------------------

И в этой секции пишешь

    if type == "esc_small_home4" then - имя своего смарта
        return function(gulag)
            return 0
        end
    end

Потом находишь в гулаге

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

и в этой секции находишь

 function checkMonster(npc_community, gulag_type)

Есть и function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

Но у тебя же смарт для мутантов, по этому используй соотвествующую секцию 

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

Там пишешь

    if gulag_type == "esc_small_home2" then
        return npc_community == "boar" - Пишешь имя группировки, у мутантов есть технические группировки, кабан собака и т.д Пишешь мутанта, который у  тебя привязан к смарту, если кабан - пиши кабана
    end

Далее переходим в config\misc\gulag_имялокации нужной

В этом файле мы будем писать логику мутантом, сталкерам.

Чтобы было проще находить нужный смарт, то в начале логики смарта твоего напиши

;--------------------------
;------ Bridge Boars ------ Имя смарта
;--------------------------

Это красиво, и правильно)

Далее начинай писать логику

[logic@esc_bridge_boar] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу
active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы

[mob_home@esc_bridge_boar] 
path_home = path1
home_min_radius = 20
home_max_radius = 40

Скольк работат в смарте, столько  и здесь пишешь секций

[logic@esc_bridge_boar2] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу
active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы

[mob_home@esc_bridge_boar2] 
path_home = path1
home_min_radius = 20
home_max_radius = 40

И так далее, зависит от кол-во работ в script/gulag_имя локации, находишь свой смарт и смотришь сколько там работ.

Все

 

 

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

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


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

Значит неправильно сделал смарт. 

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


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

Ну есть 2 варианта, со смартом и без.

1. Заспавнить мутанта. Потом создаешь спейс рестриктор. Далее в секции мутанта, находишь вот это окно 1426320435_2.PNG.c5bbd70a43c290223e39f19bd5e822bf.PNG И там выбираешь свой спейс рестриктор. И далее пишешь ему логику вот эту

[smart_terrains]
none = true

[logic]
active = mob_walker - 
on_death = death@boar_i

[mob_walker]
path_walk = swamp_lager_walker2_look
path_look = swamp_lager_walker2_walk 

[death@boar_i]
on_info = %+info%

Можешь не использовать схему walker, это я для примера показал. 

2. Для начала создаешь шейп, и создаешь в секции ai - smart_terrain  его и приатачиваешь к шейпу. Далее в логике смарта пишешь 

[smart_terrain]
type = esc_small_home4 - Название смарта
capacity = 2 Численность смарта

Далее создаешь мутанта и в логике его пишешь

[smart_terrains]
esc_small_home4 = true 

Ты привязываешь непися к смарту.

Далее заходим в scripts/gulag_имялокации

Если новую локация создал, то регистрируешь гулаг для локации.

И в гулаге пишешь

    if type == "esc_small_home4" then - Место esc_small_home4 пишешь свое имя смарта
        t = { section = "logic@esc_small_home4", - Работа 1
            idle = 0,
            prior = 5, state = {0},
            in_rest = "", out_rest = ""  - in_rest запрещено выходить, к примеру написал имя спейса, и нпс нельзя от туда выходить out_rest - куда запрещено входить. Так же пишешь имя зоны (спейса) и все.
        }
        table.insert(sj, t)
        t = { section = "logic@esc_small_home4", Работа 2
            idle = 0,
            prior = 5, state = {0}, prior - приоритет работы, если у этой работы приоритет больше, Сначала всегда нпс занимают более приоритетные работы.
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end

Далее в гулаге находишь вот это: 


function load_states(gname, type)

 

-------------------------------------------------------------------

И в этой секции пишешь

    if type == "esc_small_home4" then - имя своего смарта
        return function(gulag)
            return 0
        end
    end

Потом находишь в гулаге

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

и в этой секции находишь

 function checkMonster(npc_community, gulag_type)

Есть и function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

Но у тебя же смарт для мутантов, по этому используй соотвествующую секцию 

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

Там пишешь

    if gulag_type == "esc_small_home2" then
        return npc_community == "boar" - Пишешь имя группировки, у мутантов есть технические группировки, кабан собака и т.д Пишешь мутанта, который у  тебя привязан к смарту, если кабан - пиши кабана
    end

Далее переходим в config\misc\gulag_имялокации нужной

В этом файле мы будем писать логику мутантом, сталкерам.

Чтобы было проще находить нужный смарт, то в начале логики смарта твоего напиши

;--------------------------
;------ Bridge Boars ------ Имя смарта
;--------------------------

Это красиво, и правильно)

Далее начинай писать логику

[logic@esc_bridge_boar] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу
active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы

[mob_home@esc_bridge_boar] 
path_home = path1
home_min_radius = 20
home_max_radius = 40

Скольк работат в смарте, столько  и здесь пишешь секций

[logic@esc_bridge_boar2] - Пишешь имя работы, имя работы берется с scripts/gulag_имя локации, и находишь там свой смарт, и копируешь работу
active = mob_home@esc_bridge_boar - Это логика, пишешь название схемы и @имя работы

[mob_home@esc_bridge_boar2] 
path_home = path1
home_min_radius = 20
home_max_radius = 40

И так далее, зависит от кол-во работ в script/gulag_имя локации, находишь свой смарт и смотришь сколько там работ.

Все

 

 

Большое спасибо! Сейчас буду тестировать.


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

Всем привет! Расскажите пожалуйста, как сделать так, чтобы когда у ГГ появляется определённый предмет в инвентаре, выдался инфопоршень?

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


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

Большое спасибо! Сейчас буду тестировать.


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

Всем привет! Расскажите пожалуйста, как сделать так, чтобы когда у ГГ появляется определённый предмет в инвентаре, выдался инфопоршень?

Функция из xr_conditions - actor_has_item

[logic]
active = sr_idle

[sr_idle]
on_info = {+info =actor_has_item(af_blood) -info1} nil %+info1=run_postprocess(agr_u_fade)%

{+info =actor_has_item(af_blood) - Проверка, если есть инфопоршень info, и артефакт кровь камня

nil - Если проверка завершена, то тогда не будет продолжаться проверка, на каждом апдейте

Если эти условия все верны, то тогда 

%+info1 =run_postprocess(agr_u_fade)% - Здесь выдается инфопоршень, и выдается эффект затемнения

Просто создаешь шейп, ну и к нему приатачиваешь спейс рестриктор, можешь поставить где угодно это спейс, он не работает по принципу входу в спейс, ведь там не on_actor_inside, а on_info

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

И если ты не знал, чтобы в сдк воспроизвелась какая нибудь функция, надо написать %=имяфункции%

Допустим взял функцию из xr_effects

play_snd

on_info = %=play_snd(monsters\controller\controller_script_attack_0)% nil

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


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

Приветствую! Кто нибудь знает, как сделать активацию пда? К примеру есть обычный пда квестовый, и когда ты по нему кликал левой кнопкой мыши, была кнопка использовать, нажав на неё к нам в журнал передавалась бы информация различная.

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

Обязательно чтобы с неписем можно поговорить хоть за картой.

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

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


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

Приветствую! Кто нибудь знает, как сделать активацию пда? К примеру есть обычный пда квестовый, и когда ты по нему кликал левой кнопкой мыши, была кнопка использовать, нажав на неё к нам в журнал передавалась бы информация различная.

Вот, я нашёл видео по созданию подобных предметов, думаю, по аналогии ты можешь сделать пда.

 


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

Всем привет. При переходе на другую локацию выдаёт такую ошибку

FATAL ERROR
 
[error]Expression    : ai().game_graph().header().levels().end() != I
[error]Function      : CALifeGraphRegistry::setup_current_level
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\alife_graph_registry.cpp
[error]Line          : 91
[error]Description   : Graph point level ID not found!

Что делать?

Изменено пользователем CIDOPOBICH
  • Жму руку 1

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


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

Всем привет. При переходе на другую локацию выдаёт такую ошибку

FATAL ERROR
 
[error]Expression    : ai().game_graph().header().levels().end() != I
[error]Function      : CALifeGraphRegistry::setup_current_level
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\alife_graph_registry.cpp
[error]Line          : 91
[error]Description   : Graph point level ID not found!

Что делать?

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

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


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

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

А может ли это быть из-за того, что я не декомпилировал локацию в Xray SDK?

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


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

А может ли это быть из-за того, что я не декомпилировал локацию в Xray SDK?

Да, может

  • Жму руку 1

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


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

Да, может

Понял, благодарю

  • Жму руку 1

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


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

Кто нибудь знает, как определенную группировку подружить с мутантами.

Хоть через скрипт, или конфиги. 

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


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

Кто нибудь знает, как определенную группировку подружить с мутантами.

Хоть через скрипт, или конфиги. 

Эммммм, однако. 
Удали (-) в отношение каждого мутанта  или замени все число на 0. к нужной тебе группировке в game_relations
по пути:
gamedata - config- creatures- game_relations 


 Короткометражник хуже Демосфена

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


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

Riplika там нет таблицы взаимоотношений монстров с группировками. Все группировки обозначаются как human.

ЗЫ: в дефолтном ТЧ в последней таблице в 198 строчке пропущена запятая.

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


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

Riplika там нет таблицы взаимоотношений монстров с группировками. Все группировки обозначаются как human.

macron Технически актор это отдельная группировка, арена монстр и арена энеми тоже. 
Теоретически  можно просто произвести подмену значений в отношении этих группировок, и присвоить их принадлежность к нужной. 
А в ЛТХ прописать нужное ему название. 
 


 Короткометражник хуже Демосфена

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


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

Оговорюсь сразу, что в моддинге сталкера я (пока что) полнейший профан, поэтому больно не бейте.

Вопрос первый: хотел вставить "комету" на иные локации, кроме х18 (естественно, как и положено васяну моего уровня -  через АЦДЦ), но обнаружил, что какие координаты я бы не выставлял - она всегда спавнится в одном и том же очень конкретном месте. Собственно, как с этим бороться, и можно ли?

Вопрос второй: я хотел бы попытаться "откатить" визуалы Shadow's Addon (ну, или любого другого мода, который затрагивает цвет/свет) на что-то более похожее на ваниль, с "тёплыми-ламповыми" синими фильтрами и прочими прелестями. Но после долгих поисков, замены файлов шейдеров, шаманства с погодой и прочими конфигами, я так и не нашёл как это можно сделать, да и можно ли вообще. Это нужно лезть редактировать экзешник? Если да, то как?

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

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


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

Эммммм, однако. 
Удали (-) в отношение каждого мутанта  или замени все число на 0. к нужной тебе группировке в game_relations
по пути:
gamedata - config- creatures- game_relations 

Тебе ниже человек сказал, что нету единой таблицы взаимотношений мутантов и сталкеров, все группировки это human.

Есть к примеру зайти в m_army то там будет human = on

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

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


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

Кто нибудь знает, как определенную группировку подружить с мутантами.

Хоть через скрипт, или конфиги. 

Оптимально можно заспавнить НПС под секцией stalker_monolith. У них нейтралитет с мутантами стоит.

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


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

Оптимально можно заспавнить НПС под секцией stalker_monolith. У них нейтралитет с мутантами стоит.

Можно и с учёными так же. Но это довольно васянисто.

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


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

Можно и с учёными так же. Но это довольно васянисто.

В ванильном сталкере к сожалению иначе никак.


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

Можно ещё как я в ЛС писал сделать, т.е в движок вынести смену species через скрипт.


Дополнено 2 минуты спустя
6 часов назад, Vovan666 сказал:

Оговорюсь сразу, что в моддинге сталкера я (пока что) полнейший профан, поэтому больно не бейте.

Вопрос первый: хотел вставить "комету" на иные локации, кроме х18 (естественно, как и положено васяну моего уровня -  через АЦДЦ), но обнаружил, что какие координаты я бы не выставлял - она всегда спавнится в одном и том же очень конкретном месте. Собственно, как с этим бороться, и можно ли?

Там же вроде надо анимацию.anm делать свою для "кометы". 

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

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


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

хотел вставить "комету" на иные локации, кроме х18 (естественно, как и положено васяну моего уровня -  через АЦДЦ), но обнаружил, что какие координаты я бы не выставлял - она всегда спавнится в одном и том же очень конкретном месте. Собственно, как с этим бороться, и можно ли?

Если под "кометой" подразумевается летающая аномалия типа torrid или fierball, то она всегда летает по траектории приписанного к ней anm-файла, не зависимо от точки спавна. Корнем для anm-файлов является каталог  gamedata\anims\  Соответственно, можно действовать тремя способами:
1. Если сильно повезет, из каталога gamedata\anims\ в ресурсах ТЧ подобрать подходящий anm-файл-траекторию, и через ACDC прописать своей аномалии. Например, для Кордона это
 motion_name = path\atp_zharka.anm
2. В SDK создать свой anm-файл, если умеете.
3. Утилитой anm2ltx на основе любого anm-файла прописать новые координаты пути, если получится. Внимание! Утилю половина антивирей подозревают на вири, но это не мои проблемы.:0eadc90a-2017-44cc-a9a4-9937cdd06c3e:
https://disk.yandex.ru/d/8oZTW7tuCpdloA

Здесь всякая инфа по anm: https://www.amk-team.ru/forum/topic/10448-format-faylov-anm/

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

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


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

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

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

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

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

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

Войти

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

Войти

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

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