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

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

 
 

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

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

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


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

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

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

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

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

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

Войти

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

Войти

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

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