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

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

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

Gerbys Во время проверки скриптом, кто же текущий враг НПС отсутствует объект actor. Причины могут быть очень разнообразные от ошибок в скриптах до кривой логики.

denis2000 Причина может быть в том, что это происходит сразу после катсцены? Ведь во время неё actor находиться, насколько я понимаю, в "вакууме" так сказать.
Точнее сформулирую - происходит катсцена и после неё при попытке перезагрузить игру (любой сейв) происходит этот вылет. Помогает только перезапуск игры и загрузка более раннего сейва

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

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


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

Что-то я не пойму, где косяк:

Есть 2 НПС в одном скваде и рестриктор с логикой. Сквад находится в смарте и НПС выполняют там работу: сначала стоять на точке, после получения инфопоршня идти по пути, на конце которого установлен сигнал, при вызове которого даётся инфопоршень, а после получения обоих поршней начинается обмен сообщениями. И вроде по отдельности всё работает: каждый НПС приходит на точку, сигналы на обоих путях срабатывают, логика рестриктора переключается корректно, сообщение может корректно отправиться, однако в сборе, когда оба НПС достигают финальной точки маршрута, отправляется только одно сообщение из 4. Где я допустил ошибку?

Спойлер

;presets
[walker@start]
def_state_standing = hide
def_state_moving = assault
corpse_detection_enabled = false
gather_items_enabled = false
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
meet = no_meet

; dolg guard 1
[logic@yan_expedition_dolg_guard_1]
suitable = {=npc_community(dolg)) true
active = walker@dolg_guard_1_start
prior = 190
post_combat_time = 0, 0

[walker@dolg_guard_1_start]:walker@start
path_walk = dolg_guard_1_walk
path_look = dolg_guard_1_look
on_info = {+yan_psi_oko_kudr_about_expedition_dialog} walker@dolg_guard_1_phase_1 ;переключение работает - НПС идёт

[walker@dolg_guard_1_phase_1]:walker@start
path_walk = dolg_1_recon_walk
path_look = dolg_1_recon_look
on_signal = recon_end | %+yan_psi_oko_expedition_p1_recon_1_checked% ;если прописать тут вызов сообщения - оно вызовется

; dolg guard 2
[logic@yan_expedition_dolg_guard_2]
suitable = {=npc_community(dolg)} true
active = walker@dolg_guard_2_start
prior = 190
post_combat_time = 0, 0

[walker@dolg_guard_2_start]:walker@start
path_walk = dolg_guard_2_walk
path_look = dolg_guard_2_look
on_info = {+yan_psi_oko_kudr_about_expedition_dialog} walker@dolg_guard_2_phase_1 ;переключение работает - НПС идёт

[walker@dolg_guard_2_phase_1]:walker@start
path_walk = dolg_2_recon_walk
path_look = dolg_2_recon_look
on_signal = recon_end | %+yan_psi_oko_expedition_p1_recon_2_checked% ;если прописать тут вызов сообщения - оно вызовется

Спойлер

[logic]
active = sr_idle@start

[sr_idle@start]
on_info = {+yan_psi_oko_teleport_expedition_squad} sr_idle@teleport_expedition %=teleport_squad(yan_expedition_smart_squad:yan_expedition_smart_spawn)%

[sr_idle@teleport_expedition]
on_info = {+yan_psi_oko_vasil_about_expedition_dialog} sr_idle@teleport %=run_postprocess(fade_in_out)%

[sr_idle@teleport]
on_game_timer = 30 | sr_idle@teleport_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

[sr_idle@teleport_end]
on_game_timer = 30 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

[sr_idle@after_teleport]
on_info = {!actor_in_zone(yan_expedition_start_restrictor)} sr_idle@return_actor_start %=disable_ui() =run_postprocess(fade_in_out)%
on_info2 = {+yan_psi_oko_kudr_about_expedition_dialog} sr_idle@phase_1

[sr_idle@return_actor_start]
on_game_timer = 10 | sr_idle@return_actor_start_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

[sr_idle@return_actor_start_end]
on_game_timer = 10 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

[sr_idle@phase_1]
on_info = {+yan_psi_oko_expedition_p1_recon_1_checked +yan_psi_oko_expedition_p1_recon_2_checked} sr_idle@phase_1_blame %=send_tip(st_recon_first_confurm_clear:yan_expedition_dolg_1:yan_expedition_dolg_1)%

[sr_idle@phase_1_blame]
on_game_timer = 5 | sr_idle@phase_1_confurm %=send_tip(st_recon_first_blame:kudrischev:kudrischev)%

[sr_idle@phase_1_confurm]
on_game_timer = 5 | sr_idle@phase_1_next %=send_tip(st_recon_second_confurm_clear:yan_expedition_dolg_2:yan_expedition_dolg_2)%

[sr_idle@phase_1_next]
on_game_timer = 5 | sr_idle@phase_2 %=send_tip(st_recon_kudrischev_confurm:kudrischev:kudrischev)%

[sr_idle@phase_2]

 

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

Мод в разработке - X-7: Эпицентр

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


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

Prostomod Таймеры увеличите, похоже, что сообщения накладываются друг на друга.


10 часов назад, Gerbys сказал:

Причина может быть в том, что это происходит сразу после катсцены?

Может. Проверяйте ее логику.

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

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

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


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

Привет всем

Подскажите в каком файле anomaly мод стандартные текстуры аномалий?

Играю в зборку хочу заменить кисель на стандарт

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


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

denis2000 я увеличил таймеры до 20 - всё равно не переключает. Пробовал даже избавиться от таймеров (заменил на простое on_info без условий) - всё равно не переключает дальше 1 сообщения. 

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

Спойлер

[logic]
active = sr_idle@start

[sr_idle@start]
on_info = {+yan_psi_oko_teleport_expedition_squad} sr_idle@teleport_expedition %=teleport_squad(yan_expedition_smart_squad:yan_expedition_smart_spawn)%

[sr_idle@teleport_expedition]
on_info = {+yan_psi_oko_vasil_about_expedition_dialog} sr_idle@teleport %=run_postprocess(fade_in_out)%

[sr_idle@teleport]
on_game_timer = 30 | sr_idle@teleport_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

[sr_idle@teleport_end]
on_game_timer = 30 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

[sr_idle@after_teleport]
on_info = {!actor_in_zone(yan_expedition_start_restrictor)} sr_idle@return_actor_start %=disable_ui() =run_postprocess(fade_in_out)%
on_info2 = {+yan_psi_oko_kudr_about_expedition_dialog} sr_idle@phase_1

[sr_idle@return_actor_start]
on_game_timer = 10 | sr_idle@return_actor_start_end %=teleport_actor(yan_expedition_smart_actor_teleport_walk:yan_expedition_smart_actor_teleport_look)%

[sr_idle@return_actor_start_end]
on_game_timer = 10 | sr_idle@after_teleport %=enable_ui() =stop_postprocess()%

[sr_idle@phase_1]
on_info = {+yan_psi_oko_expedition_p1_recon_1_checked +yan_psi_oko_expedition_p1_recon_2_checked} sr_idle@phase_1_blame %=send_tip(st_recon_first_confurm_clear:yan_expedition_dolg_1:yan_expedition_dolg_1)%

[sr_idle@phase_1_blame]
on_game_timer = 20 | sr_idle@phase_1_confurm %=send_tip(st_recon_first_blame:kudrischev:kudrischev)%

[sr_idle@phase_1_confurm]
on_game_timer = 20 | sr_idle@phase_1_next %=send_tip(st_recon_second_confurm_clear:yan_expedition_dolg_2:yan_expedition_dolg_2)%

[sr_idle@phase_1_next]
on_game_timer = 20 | sr_idle@phase_2 %=send_tip(st_recon_kudrischev_confurm:kudrischev:kudrischev)%

[sr_idle@phase_2]

Логика НПС не менялась.


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

Всё, я нашёл у себя ошибку - логика останавливалась т.к. в send_tip передавался неверный story_id.
Тогда вопрос: а как в стриптах мне делать проверку на валидность story_id (story_id существует - true, иначе false)? Хочу дополнительный abort воткнуть в скрипт отправки сообщения.

И да, всё ещё хочу узнать: есть ли лимит на количество состояний в логике?


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

И ещё вопрос: а можно как-то реанимировать оригинальный printf? Я раскомментировал тело функции в _g.script, но функция всё-равно не работает. Видел способ логгирования через преобразование сообщения в команду консоли и попыткой её выполнения, но этот способ очень нестабилен (может вылететь при неправильных параметрах, да ещё и лога не будет).
Если это на уровне движка выключено - мб есть где правка на его включение?

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

Мод в разработке - X-7: Эпицентр

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


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

логика останавливалась т.к. в send_tip передавался неверный story_id

Бывает...

42 минуты назад, Prostomod сказал:

есть ли лимит на количество состояний в логике?

Нет. Логика может содержать очень большое число секций.

42 минуты назад, Prostomod сказал:

как в стриптах мне делать проверку на валидность story_id

if get_story_object_id(story_id) == nil then
        abort("There is no story object with id [%s]", story_id)
end 

 

42 минуты назад, Prostomod сказал:

можно как-то реанимировать оригинальный printf?

Зачем? Пишите лог в отдельный файл LUA методами - это решение лучше движкового метода.

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

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

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


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

пишите лог в отдельный файл LUA методами

Интересно... Можете подсказать мод, где подобное уже реализовано? Навскидку я не могу ни один такой вспомнить.

Могу, конечно, и сам с 0 попробовать сделать, но с ориентиром это будет попроще.

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

Мод в разработке - X-7: Эпицентр

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


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

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


Prostomod Не претендуя на оригинальность, лично я делал примерно так:
 

----------------------------------------------------
--		Ведение отдельного лог-файла
----------------------------------------------------

--Инициализация лога
function init_log_file()
	local file=io.open("gamedata//log_file.log","w")
	file:write("Start loggong on "..os.date(),"\n")
	file:close()
end

--Запись строки в лог
function print_log(save_string,script_name)
	if script_name == nil then script_name = "_g.script" end
	local file=io.open("gamedata//log_file.log","a")
	file:write(os.date().."|"..script_name.."|"..save_string,"\n")
	file:close()
end

 

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

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

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


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

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

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


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

Причина может быть в том

Также возможно условие не поддерживает кондлист! Например,  пытаемся получить параметры из сырой строки

combat_ignore_keep_when_attacked = {=is_enemy} true,false ; Это как пример! Можете попробовать вывести в лог значение для отладки из функции xr_logic.pick_section_from_condlist. Но повис может не сразу проявиться.

vasyan54636 Через схему cover?

anim = sleep

sound_idle = sleep

Я не проверял, но по идее должно сработать! Хотя , я не помню в оригинале есть звук у неписей sleep с секцией? Если нет добавить по аналогии с другими type = npc

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


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

Также возможно условие не поддерживает кондлист! Например,  пытаемся получить параметры из сырой строки

combat_ignore_keep_when_attacked = {=is_enemy} true,false ; Это как пример! Можете попробовать вывести в лог значение для отладки из функции xr_logic.pick_section_from_condlist. Но повис может не сразу проявиться.

vasyan54636 Через схему cover?

anim = sleep

sound_idle = sleep

Я не проверял, но по идее должно сработать! Хотя , я не помню в оригинале есть звук у неписей sleep с секцией? Если нет добавить по аналогии с другими type = npc

Прописал, но он все так же стесняется храпетьScreenshot_37.png.b492647efb866a72864df2e18c83f432.png

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


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

vasyan54636 А звук есть sleep в script_sound.ltx? Через анимпоинт он не будет издавать никакие звуки, кроме болтовни, звук гитар и гормошек

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

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


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

vasyan54636 А звук есть sleep в script_sound.ltx?

Не-а.


Дополнено 11 минуты спустя
11 минут назад, Mass сказал:

vasyan54636 А звук есть sleep в script_sound.ltx?

Добавил, все стабильно -- не храпит)Screenshot_38.png.026540dd562fa9440bdf4696ebb5f73a.png

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


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

vasyan54636 Тогда попробуйте в xr_animpoint.script после

state_mgr.set_state(self.object, self.st.animpoint:get_action(), nil, nil, {look_position = self.st.animpoint.look_position},{animation_position = self.st.animpoint.position, animation_direction = self.st.animpoint.smart_direction} )

добавить

    if self.st.sound_idle ~= nil then
        xr_sound.set_sound_play(self.object:id(), self.st.sound_idle)
    end

и в set_scheme

    

st.sound_idle= utils.cfg_get_string(ini, section, "sound_idle",npc, false, "")

 

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

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


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

@Mass Вылетает с таким логом: 

 

Спойлер

Expression    : fatal error
Function      : CScriptEngine::lua_pcall_failed
File          : C:\xray\stcop_engine\src\xrServerEntities\script_engine.cpp
Line          : 213
Description   : <no expression>
Arguments     : LUA error: ...t.a.l.k.e.r Çîâ Ïðèïÿòü\gamedata\scripts\xr_logic.script:405: attempt to call field 'set_scheme' (a nil value)

 

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


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

Здравствуйте, вылет с таким логом 

Спойлер

FATAL ERROR
 
[error]Expression    : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function      : CAI_Space::load
[error]File          : D:\prog_repository\sources\trunk\xrGame\ai_space.cpp
[error]Line          : 113
[error]Description   : cross_table doesn't correspond to the AI-map
 

stack trace:

Изменял АИ сетку , скомпилировал. 

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


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

Появилась такая неприятность: у НПС настроена логика, которая работает корректно за исключением одной детали: переключение по on_info у некоторых НПС стабильно происходит только после перезагрузки, причём переключение аналогичной логики у других НПС происходит корректно сразу же после получения инфопоршня. В чём может быть проблема и как с ней бороться?
Если что, все НПС сидят в анимации hide, прописанной в look вейпоинте:

|a=hide
Спойлер


[logic@yan_expedition_dolg_guard_4]
suitable = {=npc_community(dolg)} true
active = walker@dolg_guard_4_start
prior = 190
post_combat_time = 0, 0

[walker@dolg_guard_4_start]:walker@start
path_walk = dolg_guard_4_walk
path_look = dolg_guard_4_look
on_info = {+yan_psi_oko_expedition_p2_start} walker@dolg_guard_4_phase_2

[walker@dolg_guard_4_phase_2]:walker@start
path_walk = dolg_4_phase_2_walk
path_look = dolg_4_phase_2_look

 


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

Mindallius Спавн после этого пересобрал? И проверь ещё, актуальные ли файлы спавна и сетки в папках с уровнем и spawns в самой игре.


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

vasyan54636 тут описан способ получения более подробной информации о вылете. Фактически, игра начинает придираться к некоторым деталям и вылетать из-за каждой ошибки, зато их исправлять намного легче + выявляются скрытые, благодаря чему мод становится стабильнее. http://sigerous.ru/forum/322-2824-37


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

Касательно моей проблемы заметил такое: багаются так НПС с Отбойниками, а нормально работают те, у кого другое оружие (Абаканы), причём, кстати, багаются и в других секциях так-же. Конечно, можно и перевооружить, но хотелось бы докопаться до причины проблемы.
Если что, оружейный пак полностью оригинальный.

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

Мод в разработке - X-7: Эпицентр

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


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

vasyan54636 Похоже на синтаксическую ошибку.  Покажите, как именно, в скрипт добавили строки?

1 час назад, Prostomod сказал:

[walker@dolg_guard_4_start]:walker@start

секция walker@start существует в данном файле?

1 час назад, Prostomod сказал:

Касательно моей проблемы заметил такое: багаются так НПС с Отбойниками

А если анимку поменять на hide_na?

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


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

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


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

vasyan54636   блок с

 if self.st.sound_idle ~= nil then         xr_sound.set_sound_play(self.object:id(), self.st.sound_idle)     end

переместите  верх( поставьте перeд end), чтобы оператор end мог закрыть функцию. 

 

  • Спасибо 1

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


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

секция walker@start существует в данном файле?

Забыл добавить. Да, существует:

Спойлер


[walker@start]
team = yan_expedition_squad
def_state_standing = hide
def_state_moving = assault
corpse_detection_enabled = false
gather_items_enabled = false
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
meet = no_meet

 

59 минут назад, Mass сказал:

А если анимку поменять на hide_na?

Вроде в списке (тут) анимаций она указывалась как анимация со стрельбой, но попробую. 


Мод в разработке - X-7: Эпицентр

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


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

В чём может быть проблема и как с ней бороться?

Анимация зацикленная. Движок тупит пока не проиграет её до конца.

Делается так:

В файл xr_effects.script добавляем функцию

function reset_npc( actor, npc )
    reset_animation( npc )
end

В логику пишем

on_info = {+yan_psi_oko_expedition_p2_start} walker@dolg_guard_4_phase_2 %=reset_npc%

Подпрыгнет как ужаленный. Тормозов не будет.

 

  • Спасибо 2

Терпение... И все получится.

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


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

denis2000 Кстати назначение погоды от атмосфира помогло, теперь не вылетаетю

Mindallius [exclusive]
escape_focih_spawn - это id эксклюзивного нпс? Проверь всё, а то я помню как ты тогда нагородил)

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


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

Друзья! Подскажите пожалуйста, а как в ванильной ЗП по story_id узнать id нпс?

Что нужно: по скрипту выводить определенного конкретного нпс в оффлайн.

Пробовал делать вот так:

local sim = alife()
local npc = sim:story_object(npc_sid)
    if npc then
        sim:set_switch_offline (npc.id, true)
        sim:set_switch_online (npc.id, false)
    end

И пробовал так:

local sim = alife()
local obj
for a=1,65535 do
     obj = alife():object(a)
            if obj and obj:clsid() == npc_sid then
                sim:set_switch_offline (obj.id, true)
                sim:set_switch_online (obj.id, false)
            end
     end

npc_sid это в данном случае передаваемый параметр.

Проблема - в обоих случах npc или obj:clsid() выходят nil ВСЕГДА. То есть по факту set_switch вещи не активируются вообще. 

При этом я могу сказать, что story id на нпс висит, так как метка на нем появляется по квесту, где story id прописан в target.

И еще, сами методы set_switch явно работают, то есть если сделать

local sim = alife()
local obj
for a=1,65535 do
     obj = alife():object(a)
            if obj then
                sim:set_switch_offline (obj.id, true)
                sim:set_switch_online (obj.id, false)
            end
     end

То все объекты вокруг исчезают. Проблема в том, чтобы убрать конкретный.

Сам sid прописан через

[story_object]
story_id = 

в custom_data

Есть ощущение, что я делаю какую-то дурость, но я совсем запутался уже.


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

UPDATE:

Перепроверил, во втором варианту obj:clsid() не nil, но он регистрируется у всех объектов (даже у тех где его по идее нет) и он нигде не совпадает с тем, что указан в [story_object].

И да, на самом деле тут не совсем ваниль, а OpenXray, забыл уточнить. Но вроде он также работать должен как обычных в плане скриптов

Возможно я тупо путаю разные переменные...


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

так, оказалось, можно это сделать по имени нпс через string.find(obj:name(),"abc"), но все равно хотелось бы понять что я делал не так

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

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


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

как в ванильной ЗП по story_id узнать id нпс?

Так это -же вот эта функция делает: get_story_object_id

 
6 часов назад, Mawrak сказал:

Сам sid прописан через

Вы путаете sid и story_id - это разные идентификаторы, первый число, второй строка...
А obj:clsid() - это вообще получить идентификатор КЛАССА обекта...

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

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

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


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

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

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

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

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

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

Войти

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

Войти

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