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

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


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

На самом деле, в ЗП используются "фейковые" левел_ченджеры, кто смотрел в СДК знает - они где-то на крыше домов с вей-поинтами внутри, на которые перебрасывает актора функция перехода от проводника. Кроме этого (это уже из личного опыта), в настройках граф-поинтов есть интересный параметр "не для игрока", так вот он отключает указатель (стрелочку) таск-менеджера при наличии выданного задания. Т.е., если вы сшили локации, и при выданном задании (цель которого находится на другой локе) вам нужно, чтобы указатель вел к ближайшему переходу, не указывайте при коннекте граф-поинтов в СДК параметр "не для игрока"...но это уже для "продвинутых пользователей:). Эти граф-поинты как раз и используются в ЗП для переброса актора - там-же не нужно юзать указатель на переход...его нету, там проводники))

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

Callisto, Что значит по "заданным координатам"? Кто, когда и где их задает?

Я в all.spawne :) Это продолжение предыдущего вопроса.

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

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

userbar368.png

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

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

Или же у тебя где-то срабатывает сторонний скрипт, изменяющий место спавна для актора заданного тобою в all.spawn, т.е. типа:

 db.actor:set_actor_position(vector():set(258.18,29.34,-460.75)) --/ меняем место спавна (телепортируем)

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Clayman, особенности функционирования SDK и то, что в игре - порою сильно отличаются.

Вот жаль, что многие так считают. СДК, насколько я знаю - основной инструмент разработчиков СТАЛКЕРа, а распаковка-редактирование-запаковка аллспана - продукт деятельности моддеров. Которые не имели изначально доступа к инструментам СДК. И аллспавн есть не что иное, как скомпилированный файл секций с параметрами всех элементов всех уровней (спавн-элементов и вей-поинтов на уровнях). И если вы его сравните с параметрами в СДК, то увидите, что практически все совпадает. Есть ошибки распаковки уровня, но это поправимо. Но это уже старая оффтоп-дискуссия:)

 

Да и уточню, параметр "не для игрока" настраивается для граф-поинтов, объединяющих уровни (для алайф-переходов), а не для левел-ченджеров.

 

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

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

Clayman, не стОит тут затевать дискуссию "SDK vs sripts", выдавая за аксиому свои предпочтения.

Я так не считаю, а в этом уверен и уверен на практическом опыте своем и других. Кстати, наличие многочисленных отключалок в скриптах игры типа if editor() then - уже подтверждает мною сказанное.

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

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

Во-вторых, чтобы внести мелкую или даже крупную правку в игру в большинстве случаев более чем достаточно это делать напрямую в скриптах/конфигах или том же all.spawn'е.

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

Хороший мод может быть создан только теми, кто и использует SDK на полную катушку и владеет навыками работы со скриптами/конфигами уже непосредственно созданной заготовки.

И совершенно верно, что "аллспавн есть не что иное, как скомпилированный файл секций с параметрами", однако дальнейшее абсолютное утверждение "всех элементов всех уровней (спавн-элементов и вей-поинтов на уровнях)" - ошибочно.

Отдельные элементы (как поминавшийся тут ранее dest_graph_point) присутствуют порою чисто рудиментарно и нередко только именами...

Да и помимо "всех", которые даны в all.spawn'е - в игре спавнится и можно спавнить еще много чего (в том числе и вей-поинты), о чем уже SDK и не догадывается... ;-)

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos, С координатами и вертексами у меня все правильно, и сторонних скриптовых перемещений у меня нигде нет. Но на чистой игре тоже самое.

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

; cse_abstract properties
section_name = level_changer
name = zaton_level_changer_pri
position = 213.40, 22.43, 548.66
direction = 0, 0, 0
id = 65535
version = 128
cse_abstract__unk1_u16 = 0x1
script_version = 12

; cse_alife_object properties
game_vertex_id = 292
distance = 67.199997
level_vertex_id = 1328103
object_flags = 0xffffff3e

; cse_shape properties
shapes = 1
shape_0:type = box
shape_0:axis_x = 8.25219917297363,0,0
shape_0:axis_y = 0,3.09340000152588,0
shape_0:axis_z = 0,0,8.25219917297363
shape_0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3

; cse_alife_level_changer properties
dest_game_vertex_id = 851
dest_level_vertex_id = 5256
dest_position = -232.85, -0.514, -240.602
dest_level_name = pripyat
dest_graph_point = pripyat_lc_graph_point
silent_mode = 1

 

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

userbar368.png

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

Хороший мод может быть создан только теми, кто и использует SDK на полную катушку и владеет навыками работы со скриптами/конфигами уже непосредственно созданной заготовки.

- согласен на 200 процентов.

 

Callisto, ну я же рассказал, как в ЗП работает переход - при общении с проводником, скрипт перебрасывает актора в определенный вей-поинт, который находится в фейковом левел_ченджере, который в соответствии с настройками кидает его уже на нужный уровень, спавня в прописанном граф-поинте (dest_graph_point = pripyat_lc_graph_point). В твоем случае (в твоей секции) все понятно - уровень Припять, граф-поинт для старта - pripyat_lc_graph_point.

 

ВОт скрин,оригинального перехода:

Затон:

zaton.jpg

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

Callisto, чудес не бывает (как правило). ;-)

Я не пользуюь различными повелителями зон, но их принцип тривиален - или для телепортации задается "ручками" нужная точка (что редко) или используются как раз готовые точки для переходов, совпадающие с сюжетными. Однако все это как правило вызывается "руками", т.е. самим игроком.

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Все. Мозг оканчательно вытек.

Clayman, Тогда перефразирую ранее заданный вопоос: можно ли использовать уже существующие графпоинты? Если да, где их все можно узнать?

 

Artos, Буду смотреть, изучать, :)

userbar368.png

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

Callisto, собирай быстрее моск совочком:)

Если ты пользуешься распакованным аллспавном, смотри в файлах alife_уровень, по поиску level_changer, в каждом переходе параметр dest_graph_point как раз указывает на граф-поинт на другом уровне, где спавнится актор. Выпиши их и юзай в своих переходах. Как сделать другие точки спавна актора для новых переходов - спрашивай у скриптовиков, я кроме как добавлением новых граф-поинтов не знаю как. Но это только в СДК и с перекомпиляцией спавна.

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

Callisto, твое предположение о "накрывающем рестрикторе" скорее всего верно.

Однозначно: актор переходит на Припять по указанным тобою координатам, но ... срабатывает рестриктор 'pri_a15_sr_cutscene' (пока не разобрал деталей, а радиус у него менее 8 метров. Логика этого рестриктора запускает в конечном итоге телепорт актора по указанным этим рестрикторам путям:

%=teleport_actor(pri_a15_actor_walk:pri_a15_actor_look)%

Т.о. выдерживается именно заданный изначальный сюжет... и актор оказывается "в бане".

 

Clayman, повторю, что dest_graph_point имеет значение только для SDK, в котором является по сути организационной единицей. Исходные для него и основные для игры параметры именно dest_game_vertex_id, dest_game_vertex_id, dest_position, dest_direction - и именно они (и только они) определяют в игре место спавна и направление взгляда актора после перехода по левел-ченджеру.

Модмейкерам, которые не предполагают работать с добавленными переходами в SDK можно в распаковке алл.спавна иль при скриптовом спавне переходов просто не указывать этот параметр или оставлять/задавать его с пустой строкою.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

У меня на ТЧшной Припяти происходит вылет:

 

stack trace:

0023:082B62E5 xrGame.dll, CxIOFile::Scanf()

 

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

 

С восстановленой функцией printf(fmt,...) выдало такой лог при переходе на другую локацию:

 

 

* 18643 objects are successfully saved
* Game Виталий - autosave.scop is successfully saved to file 'c:\users\public\docume~1\stalke~1.-\savedgames\Виталий - autosave.scop'
- Disconnect
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[%s]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[test_1_animpoint_1]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[%s]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[l11pri_test_1_animpoint_1]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[%s]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[l11_pri_smart_terrain_5_7_animpoint_4]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[%s]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[l11_pri_smart_terrain_5_7_animpoint_3]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[%s]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[l11_pri_smart_terrain_5_7_animpoint_2]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[%s]_is_unregistered
! Cannot find saved game ~~~dbg:smart_cover_binder.net_destroy()_smart_cover_[l11_pri_smart_terrain_5_7_animpoint_1]_is_unregistered
stack trace:

0023:082B62E5 xrGame.dll, CxIOFile::Scanf()

 

Что значит is_unregistered ? И почему ругань на анимпоинты ?

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

dest_graph_point - не рудимент. По этому параметру xrai связывает локации. В игре, понятно, не нужен - имена граф-поинтов при компилировании сетки безвозвратно теряются.

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

Batment, нет никакой ругани в твоем логе. is_unregistered - "отрегистрирован", т.е. объект уходит в оффлайн (net_destroy) и движек его отрегистрирует из онлайновой базы объектов.

Ну а с причиной вылетов - разбирайся... пока информации практически нет для каких-либо предположений.

 

KD87, с "рудиментарностью" уже разобрались, Для игры и моддинга "без SDK" - не задействовано - значит "рудимент", тем более левел-ченджеры (в исходном вопросе о них была речь) никак не связывают сетки локаций, по ним только актор ходит. ;-)

Ну а для SDK'шников - важный и необходимый параметр.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

срабатывает рестриктор 'pri_a15_sr_cutscene'

Телепортация по этим же координатам присутствует и в рестрикторе pri_a15_sr_exit.

 

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

userbar368.png

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

Callisto, присутствие в логике - еще не означает что 'это' будет выполнено... В логике pri_a15_sr_exit для телепортации стоИт кучка условий и до телепотрации еще "далеко", т.е. это все же "вторичный" сюжетный рестриктор, зависимый от ситуации.

А вот pri_a15_sr_cutscene - это как раз жесткий менеджер, управляющий сюжетом на локации Припять.

Как только актор оказывается в Припяти, этот рестриктор активизируется и безусловно(!) начинает командовать.

1. По первой же активной секции (run_black) запускает "черный экран" и выполняет еще кучку всячинки...

2. Через 5 секунд телепортирует актора (pri_a15_actor_walk)

3. При наличии инфопоршня pas_b400_done - начинает рулить различным спавном сюжетных персов и групп...

При отсутствии инфопоршня - вновь телепортитует актора (pri_a15_actor_start_walk)

4. В конце концов снимает "черный экран" и игра продолжается по сюжету.

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

 

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

Можно и вариантом с инфопоршнем, но чтобы именно самая первая активная секция pri_a15_sr_cutscene, не успев закрыть все черным экраном и не телепортнув куда ей прописано актора, узнала бы про твой инфопоршень и перешла на sr_idle@nil ... иль как-то иначе... тогда актор останется по координатам, которые заданы для левел-ченджера. Однако, сюжет на Припяти будет поломан.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Всем привет! Нужна помощь. Я пытаюсь составить проверку следующего типа: представим, что в слоте номер 3 к примеру, у гг что то есть, и нужно что бы игра, считывая имя секции этого предмета, проверяла, есть ли в инвентаре гг, ещё предметы с таким же именем секции. Если таковы имеются, то выполняется действие. Ну а если объект есть только в слоте гг, но такого же нет в инвентаре, то соответственно ничего происходить не должно. Надеюсь, я доходчиво объяснил суть вопроса.

Реклама любых модов бесплатно на моём

сайте писать в личку

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

Вот держи функцию проверки:


function check()
local slot_item = db.actor:item_in_slot(3)
if not slot_item then
return false
end

for i= 0, db.actor:object_count() - 1 do
local item = db.actor:object(i)
if item:section() == slot_item:section() and item:id() ~= slot_item:id() then
--секции совпали, а айдишники нет
return true
end
end

return false
end

 

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

Не знаю зачем тебе твой переход

Это для того, чтобы предоставить игроку своего рода выбор: проходить сюжет или нет, при поиске вещей. Если сюжет не прходить, то его и поломать можно :)

Сделала я это все ГГ нормально спавнится при переходе, но при прохождении сюжета, после кат сцены, его телепартирует за пределы игровой части локации :) Но это уже я где-то накосячила и догадываюсь где, но еще не проверяла.

 

Возник такой вопрос: как называется та штука, в форме сферы, которая выплевывает долговцев на градирне? Точнее мне нужен ее визуал, чтоб заспавнить на месте перехода.

userbar368.png

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

Callisto, ты бы хоть скрин "той штуки" показала бы, чтобы попонятнее было... тем, кто давно не видел "выплевывания долговцев"... ;-)

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

В игре есть, например, name = zat_b20_teleport_horiz

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

Войти

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

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

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