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

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

 
 

Здравствуйте. Снова нуждаюсь в помощи, т.к. сам разобраться не смог.
У меня вылет при загрузке сохранения сделанного после опред-ных действий. 
 

Спойлер

Сделана рабочая логика персонажа, несколько спейс рестрикторов и масштабная логика для НПС в смарт террейне. (Подобная используется в оригинале, например на Скадовске)
Данная логика и рестрикторы сделаны месяца 3 назад и они все работали без ошибок. 
Суть в чем: мы идем за персом потом нас тепает на смарт террейн с масштабной логикой, нпс менят свой смарт на этот. Начиная с этого момента при попытке загрузить сделанное сохранение, то будет вылет.

P.S. Так же я заметил что перестали делаться автосейвы, при любой попытке их вызова (рестриктор, скрипт и т.п.), так что попытка синхронизировать скрипты сохранением не выходит.

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

Вот собственно сам лог вылета

[error]Expression    : fatal error
[error]Function      : lua_pcall_failed
[error]File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
[error]Line          : 140
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...ker_Зов Припяти\gamedata\scripts\xr_combat_ignore.script:109: attempt to index field 'actor' (a nil value)

stack trace:

 

Спойлер

function action_process_enemy:enemy_callback( obj, enemy )
--'    local obj_pos = self.object:position()
--'    local ene_pos = enemy:position()
--'    printf("FOUND ENEMY [%s](%s,%s,%s) -> [%s](%s,%s,%s)", self.object:name(), obj_pos.x, obj_pos.y, obj_pos.z,
--'                                                           enemy:name(), ene_pos.x, ene_pos.y, ene_pos.z)
    if enemy:id() == db.actor:id() then        ----------------------------------- 109-ая строка
        fighting_with_actor_npcs[obj:id()] = true
    end

    local is_obj_enemy = is_enemy( obj, enemy, self.st, false )
    if is_obj_enemy == true then
        local se_obj = alife():object(obj:id())
        if se_obj and se_obj.m_smart_terrain_id ~= 65535 then
            local smart_obj = alife():object(se_obj.m_smart_terrain_id)
            smart_obj:set_alarm()

            if enemy:id() == db.actor:id() and smart_obj.base_on_actor_control ~= nil then
                smart_obj.base_on_actor_control:actor_attack()
            end
        end
        local se_enemy            = alife():object(enemy:id())
        if se_obj and se_enemy then
            local sim_obj_registry     = simulation_objects.get_sim_obj_registry()
            if     se_obj.group_id ~= 65535     and sim_obj_registry.objects[se_obj.group_id] ~= nil and
                se_enemy.group_id ~= 65535     and sim_obj_registry.objects[se_enemy.group_id] == nil and
                se_obj.position:distance_to_sqr(se_enemy.position) > 900 then
                return false
            end
        end
    end

    return is_obj_enemy
end

P.S. скрипт был немного изменен, но установка ориг-ного скрипта проблему не решает

local ignored_smart = {
    zat_stalker_base_smart    = true,
    jup_b41                    = true,
    jup_a6                    = true,
    pri_a16                    = true,
    escape_memmory_d1        = true,   ----------
    garbage_baze_bandits    = true  ------------- добавил вот эти строки в самом начале скрипта
}

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

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

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


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

ZaKoN232 Редко, но метко базовые инициализации переменных в пространстве имён Lua могут глючить. Здесь Lua ещё не успела завести в пространстве db подпространство (поле таблицы) .actor, где и предполагалось хранить заспавленный game_object актёра. Полагаю, что во всех подобных случаях безопасно заменить обращение к конструкции db.actor:id() непосредственно на "вшитый" айди актёра, а именно строку-константу AC_ID (более толерантно к ошибкам будущих модов), или того проще на число 0 (собственно, айди актёра).

  • Мастер! 1

Я логи в баню удалил, а вот за за рейдеры – не помню!

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


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

Исправил, не помогло. (я даже всю локу перекомпилил, не помогло)


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

Нуу нет, спасибо =))

Боишься что я найду твою ошибку.

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


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

@BarmaGlot
Данный вылет был решен, спасибо. Я бы вряд-ли додумался, но я был близко, когда просто вырезал эти строки.
Теперь вылет поменялся и он также связан с загрузкой сохранения, но уже действует по другому.
[error]Expression    : fatal error
[error]Function      : lua_pcall_failed
[error]File          : c:\xray\forward frontier\public build\src\layers\xrrenderdx10\dx10resourcemanager_scripting.cpp
[error]Line          : 140
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...mes\stalker_Зов Припяти\gamedata\scripts\xr_logic.script:1270: attempt to index local 'obj' (a nil value)
Я понимаю что ошибка в логике, но меня смущает строка 1270: 
 

Спойлер

 local npc_id = obj:id()

Скорее всего такая же беда как и с актером, но тут уже исправить будет сложнее. Продолжу работать и спасибо за помощь.


P.S. 13.03.23.
Данный вылет происходил из-за незарегистрированного инфопоршня.

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

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


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

ZaKoN232 С xr_logic может быть уже множество причин, и не понятно без стека вызовов, куда копать. Попробуйте отлогировать чем-либо непосредственно перед 1270 строкой (погуглите-поищите как именно можно обустроить логирование). Возможно, поможет вызов callstack() (функция из _g.script)

А так да, в переменной obj не содержится собственно game_object, или даже может содержаться, но движком соответствующий ему объект уже утилизован. Например, это может быть фантом псевдо-собаки: Lua видит его game_object, в то время как он по-факту уже исчез. Впрочем, такого рода вылеты как правило не имеют лога вовсе, так себе пример 🤔


Я логи в баню удалил, а вот за за рейдеры – не помню!

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


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

Вопрос по ЗП, как создать вначале игры около ГГ предмет, не в инвентаре, а около, тот же костюм допустим, когда он на Затоне появляется, координаты 257 19 541(около спавна), если они вообще нужны. Какие скрипты за это отвечают

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


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

Tenates Тут нужно добавлять секцию спавна предмета в all.spawn. 
Тут можно 2-мя способами: через сдк или через прогу ACDC.
В интернете много уроков по обоим прогам, да и можно самому разобраться.

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

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

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


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

Tenates ZaKoN232 Через скрипт(ы) вещи типа спавна барахла делаются на порядок проще, чем мурыжить SDK и allspawn. Разумеется, это имхо. Так как я как раз по части SDK и олспавна полный ноль 🤣

Есть много способов заспавнить барахло скриптом, они все легко гуглятся. Начните гугление с alife():create()

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

Я логи в баню удалил, а вот за за рейдеры – не помню!

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


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

как создать вначале игры около ГГ предмет

взято из мода TLR. Смотри в tlr.script --- Спавн инструментов для калибровки на Затоне и Юпитере---

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


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

Добрый вечер хотел спросить по поводу вот этого вылета


FATAL ERROR
 
[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : ...ll of pripyat\gamedata\scripts\se_smart_cover.script:50: attempt to index field '?' (a nil value)
 

stack trace:
Сначала я предположил что нужно добавить файл из UEgamedata, а позже этот же файл из sdk но тоже вылет поэтому спрашиваю если кто знает пожалуйста, помогите. 

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


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

D37a8b У меня подобный вылет был когда у меня СДК сломался и он начинал компилировать спавн неправильно. Тогда я просто установил другой СДК и все пошло по красной дорожке. 
У вас же судя по всему вылет прямо в самой игре и как то связан с cover-ами. Вы добавляли новые cover-а?
Я щас постараюсь посмотреть причину, если найду способ решения - вам отпишу.

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


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

D37a8b Если вы ставили анимации sit_ass и sit_knee то дело в них. Они есть в сдк но их нет в игре.

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


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

Belka_mod да скорее всего в этом и проблема, я вспомнил у меня вроде такое уже было, спасибо

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


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

D37a8b Если вам нужны эти анимации то скопируйте содержимое этого архива в папку с игрой. Если данные файлы есть у тебя в геймдате то придётся совмещать

  • Лайк 1

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


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

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


 

Защитим мир от заразы - Зоны                   Долг.gif

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


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

SoDizzari Скинь логику где вызывается озвучка и скинь строку регистрации озвучки
А также проверь пути для ogg файла

 

Спойлер

zat_b38_stalker_cop_about_lair_bloodsucker

[zat_b38_stalker_cop_about_lair_bloodsucker]
type = npc
npc_prefix = false
path = scenario\zaton\zat_b38_stalker_cop_about_lair_bloodsucker
shuffle = seq
idle = 3,5,100

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

[remark@see]
target = story | actor
anim = guard_na
on_actor_dist_le_nvis = 7 |  {-zat_b38_stalker_cop_about_lair_bloodsucker_done} %=play_sound(zat_b38_stalker_cop_about_lair_bloodsucker) +zat_b38_stalker_cop_about_lair_bloodsucker_done%
...

 

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

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


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

хочу реализовать по сюжету возврат в прошлое и в будущее, что-то типа повествования от лица рассказчика. мне нужно чтобы после определенного действия (диалог или попадание в определенную зону например) игрок телепортировался в точку А, и сразу после этого запускалось бы диалоговое окно(не обязательно, если честно будет даже проще если вы подскажете способ БЕЗ этого). после его конца, т.е выбора определенного диалога, игрока должно телепортировать на исходную позицию. как это можно реализовать?

немного изменил и дополнил.


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

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


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

АлеБард 

Тут нужен спейс рестриктор с примерно такой логикой:

Спойлер

[logic]
active = sr_idle@info

[sr_idle@info]
on_info = {+active_punch_actor +gar_nahalo_zasadi -gar_zaglushka_2 =actor_in_zone(spawn_krovosos_prolog_2)} sr_idle@punch %=disable_ui +gar_zaglushka_2% 

[sr_idle@punch]
on_game_timer = 15 | sr_idle@telep %=run_postprocess(black:1996:true)% 

[sr_idle@telep]
on_game_timer = 20 | sr_idle@sleep %=teleport_actor(prolog_1_spawn_point_actor)% 

[sr_idle@sleep]
on_game_timer = 30 | sr_idle@nil %=stop_postprocess(1996) =enable_ui% 

[sr_idle@nil]

После телепорта нужно выставить нпс, который активирует диалог сам. Можно выставить временной таймер, например через 5 секунд после тп на point будет выдаваться инфопоршень и нпс начнет диалог

Для нпс нужна любая основная логика и обязательно логика типа meet:
 

Спойлер

[logic@gar_nikolay_molhun]
active = walker@hdem
suitable = {=check_npc_name(gar_nikolay_molchun)} true
prior = 200

[walker@hdem]
path_walk = nikolay_molhun_walker_1_walk
path_look = nikolay_molhun_walker_1_look
invulnerable = {+gar_ubit_kolya} false, true
combat_ignore_cond = false
combat_ignore_keep_when_attacked = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
meet = meet@molhun_dialog


[meet@molhun_dialog]
close_anim         = nil
close_victim     = nil
far_anim         = nil
far_victim         = nil
close_distance     = 0
far_distance     = 0
use = {+gar_ubit_kolya} false, {+gar_kolya_hivi} false, {+gar_fiesh_serchd +pogovoril_s_koley} self, {+pogovoril_s_koley} false, true
meet_on_talking = false
allow_break = false
trade_enable = false
meet_dialog = {+gar_fiesh_serchd +pogovoril_s_koley} gar_zombied_nikolay_2_dialog, gar_zombied_nikolay_1_dialog

meet_dialog - диалог который начнет гг (подобно start_dialog из профилей нпс)
use = ... {+gar_fiesh_serchd +pogovoril_s_koley} self, где self - означает что нпс сам начнет диалог.

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

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


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

SoDizzari Скинь логику где вызывается озвучка и скинь строку регистрации озвучки
А также проверь пути для ogg файла

 

  пример (Скрыть контент)

zat_b38_stalker_cop_about_lair_bloodsucker

[zat_b38_stalker_cop_about_lair_bloodsucker]
type = npc
npc_prefix = false
path = scenario\zaton\zat_b38_stalker_cop_about_lair_bloodsucker
shuffle = seq
idle = 3,5,100

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

[remark@see]
target = story | actor
anim = guard_na
on_actor_dist_le_nvis = 7 |  {-zat_b38_stalker_cop_about_lair_bloodsucker_done} %=play_sound(zat_b38_stalker_cop_about_lair_bloodsucker) +zat_b38_stalker_cop_about_lair_bloodsucker_done%
...

 

Нет ты не понял, я про стандартные приветственные фразы НПС: "Здравствуй, Сталкер" "Заходи если что"


 

Защитим мир от заразы - Зоны                   Долг.gif

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


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

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


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

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


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

АлеБард Есть несколько способов:
Через скрипт:

Спойлер

task_manager.get_task_manager():give_task("zat_sih_rabota_nahalo_2")

Где <zat_sih_rabota_nahalo_2> айди квеста

Через логику рестриктора:

Спойлер

=give_task(gar_nikolay_molhun_kvest)

Где <gar_nikolay_molhun_kvest> айди квеста

И через завершение квеста. Тут функция такая же как у рестриктора:
 

Спойлер

[gar_nikolay_molhun_kvest] ;Николай Молчун Живой мертвец
icon = ui_inGame2_gar_nikolay_molhun
....
condlist_0 = {+death_gar_sim_7_molhun_squad +gar_ubit_kolya} complete %=give_task(gar_nikolay_molhun_kvest_2)%

=give_task(gar_nikolay_molhun_kvest_2)

 

  • Спасибо 1

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


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

ZaKoN232 можешь подсказать на счёт вопроса выше?


 

Защитим мир от заразы - Зоны                   Долг.gif

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


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

SoDizzari Они вызываются рандомно, если ты про фразы алайфных нпс.
Вот небольшой список:

Спойлер

meet_hello_1
meet_hello_2
meet_hello_3
meet_hello_4
meet_hello_5
и т.д.

Чтобы добавить новые просто кидаешь обработанный файл ogg в нужную папку озвучки обычных нпс и называешь след по порядку.

А если ты про фразы например Бороды (когда подходишь к нему он приветствуется, а когда уходишь он прощается), то там сделано по другому.

Спойлер

[meet]
close_snd_hello = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_greeting, zat_a2_stalker_barmen_greeting_angry
close_snd_bye = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_farewell, zat_a2_stalker_barmen_farewell_angry

zat_a2_stalker_barmen_greeting - это айди озвучки приветсвия
zat_a2_stalker_barmen_farewell - это айди озвучки прощания 


 

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


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

SoDizzari Они вызываются рандомно, если ты про фразы алайфных нпс.
Вот небольшой список:

  приветствия (Скрыть контент)

meet_hello_1
meet_hello_2
meet_hello_3
meet_hello_4
meet_hello_5
и т.д.

Чтобы добавить новые просто кидаешь обработанный файл ogg в нужную папку озвучки обычных нпс и называешь след по порядку.

А если ты про фразы например Бороды (когда подходишь к нему он приветствуется, а когда уходишь он прощается), то там сделано по другому.

  кусок логики Бороды (Скрыть контент)

[meet]
close_snd_hello = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_greeting, zat_a2_stalker_barmen_greeting_angry
close_snd_bye = {-zat_b30_barmen_under_sultan} zat_a2_stalker_barmen_farewell, zat_a2_stalker_barmen_farewell_angry

zat_a2_stalker_barmen_greeting - это айди озвучки приветсвия
zat_a2_stalker_barmen_farewell - это айди озвучки прощания 


 

Так почему я их не слышу? Скидываю другу свой мод он слышит голоса НПС, а я не слышу.


 

Защитим мир от заразы - Зоны                   Долг.gif

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


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

SoDizzari Возможно в том что ты мог не обработать звук в формате waw и не перенес его в ogg уже в самом СДК (Я так делаю и у меня с озвучкой все хорошо) Либо у звука стоит низкий параметр громкости, либо его дальность слышимости равна 2 метрам. Тут можно гадать очень долго из-за чего так может происходит. (У моего друга была подобная фигня, но у него драйвера звука были устаревшие)

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


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

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

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

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

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

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

Войти

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

Войти

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