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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

Universal ACDC и другие perl-скрипты


KD87

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

Как решить эту ошибку?

Скрытый текст

H:\Распаковка ALL.SPAWN\Распаковка ALL.SPAWN\LAST_TRY\spawns2\universal_acdc-1.40>universal_acdc.pl -d ../all.spawn -out ../unpack ../config/
log inited: console
Universal ACDC v.1.38
checking version of ../all.spawn...
        This is a spawn of S.T.A.L.K.E.R. Shadow Of Chernobyl (1.0001 or higher)
opening ../all.spawn...
reading header...
reading alife objects...
handling error with wpn_bm16, template C/C

FATAL ERROR!
Function: stkutils::data_packet::error_handler
Line: 1548
Description: unhandled exception

 

«Твой драккар на дне лежит, сердце пламенем горит, но прохладны воды в море и душа не знает горя, день придёт, наступит час, смерть ждёт каждого из нас!»

 

Вышел ежик из тумана, выжрал ежик пол стакана, поглядел в пустой стакан и опять ушел в туман)))

Ошибка в нет-пакете обреза.

Можно попробовать добавить ключ -nofatal, асдс с этим ключом будет игнорировать ошибки.

  • Нравится 1
  • Полезно 1

Вылазит ошибка Can't locate stkutils/ini_file.pm in @INC (you may need to install the stkutils::ini_file module).

 

Здесь на форуме как-то размыто про эту ошибку писали, не совсем понятно где расположение папки stkutils указывать(stkutils находится в папке с ACDC).

 

 

У ActivePerl жуткая и неприятная установка:ireful2:

Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится.

img.php?nick=Balavnik&sert=2&text=t6

Я пишу скрипт, который разбирает формат all.spawn. Разобрал немалую часть, но не могу разобрать NET пакет для объекта esc_lager1. Вот я в архив поместил только пакет в 286 байт: https://disk.yandex.ru/d/NCsjeAAwiNoavg

 

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

 

Мне не понятно, что находится по смещению 256. Там идут 16 байт, которые мне не известны, а потом идут параметры CSE_PHSkeleton (startup animation = $editor). Мне нужно узнать, что за 16 байт до строки $editor?

 

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

Изменено пользователем Pavel_Blend
2 часа назад, Pavel_Blend сказал:

Мне не понятно, что находится по смещению 256. Там идут 16 байт, которые мне не известны, а потом идут параметры CSE_PHSkeleton (startup animation = $editor). Мне нужно узнать, что за 16 байт до строки $editor?

 

 

0000 | 1C0101007374616C6B6572006573635F | ....stalker.esc_
0010 | 6C61676572310000FE3F1151C376029E | lager1.
...
00C0 | FFFF6163746F72735C6E6F766963655C | яяactors\novice\
00D0 | 677265656E5F7374616C6B65725F3200 | green_stalker_2.
00E0 | 000001050000803F0000000000000000 | 

(acdc)equipment_preference: 4 байта длина массива, элемент массива - 1 байт
в движке CALifeHumanBrain::m_cpEquipmentPreferences
00FF |                               05 | 
0100 | 0000000202000101                 |

(acdc)main_weapon_preferences: 4 байта длина массива, элемент массива - 1 байт
в движке CALifeHumanBrain::m_cpMainWeaponPreferences
0108 |                 0400000000020002 | 

0110 | 24656469746F720000FFFF020000     | $editor.

 

  • Нравится 1
  • Полезно 1

@abramcumner получилось. Только в конце 3 байта какие-то ещё остались (в самом конце NET пакета 02 00 00). Это выравнивание так сработало? Или какие-то реальные данные?

 

Я хотел бы написать аналог acdc, только на питоне. Чтобы легче было добавлять новые функции. Но пока сложновато идёт написание.

Изменено пользователем Pavel_Blend
  • Нравится 1
12 часов назад, Pavel_Blend сказал:

Только в конце 3 байта какие-то ещё остались (в самом конце NET пакета 02 00 00). Это выравнивание так сработало? Или какие-то реальные данные?

Выравнивания в нет-пакетах точно нет. Все данные реальные.

 

Эти байты пишутся/читаются в se_stalker.script STATE_Write/STATE_Read

02 - u8, job_online

00 - bool, was_in_smart_terrain

00 - bool, death_droped

  • Нравится 1
  • Полезно 1

Как в all.spawn определить локацию, на которой находится объект? Я разобрал спавн элемент и получил параметры:

section_name = "ammo_vog-25"
name = "dar_ammo_vog-25"
game_type = 0
rp = 254
position = 11.041171073913574, 5.667025089263916, 8.340907096862793
direction = 0.0, 0.0, 0.0
respawn_time = 0
object_id = 65535
id_parent = 65535
id_phantom = 65535
flags = 33
version = 118
script_version = 6
client_data_size = 0
client_data = b''
spawn_id = 3268
size = 61
graph_id = 1109
distance = 0.0
direct_control = 1
node_id = 2872
flags = 4294967103
ini_string = ""
story_id = 4294967295
spawn_story_id = 4294967295
visual_name = "weapons\ammo\ammo_vog-25"
flags = 0
condition = 1.0
elapsed = 1

Локация определяется по graph_id и node_id? Но как это делается?

graph_id - номер вершины в глобальном графе. Хранится в game.graph. В ТЧ лежит в отдельном файла, в ЧН/ЗП встроен в all.spawn. В нем же хранится список локаций и соответствие вершин локациям.

node_id - номер ai-ноды в аи-сетке локации. Хранится в соответствующем level.ai

  • Нравится 2
  • Полезно 2

Если all.spawn разбить на level.spawn'ы, то при разбиении будут созданы файлы неизвестных локаций:

 

_level_unknown, ai_test, ai_test_new, ai_test2, jim_dark, koan_test, l03_agroprom_hw и т. д.

 

Откуда они взялись? Они содержат только граф поинты и их данные хранятся в game.graph.

Я делал компиляцию разбитого all.spawn через СДК. И у меня игра работает не стабильно. Связано ли это с этими локациями? Я их в свой спавн/граф не добавлял. Просто удалил их и скомпилировал нормальные локации. В игре на некоторых локациях красный текст в консоли:

[10/20/24 10:21:09]	! Cannot build GAME path! (object gar_stalker_respawn_116830)
[10/20/24 10:21:09]	! CURRENT LEVEL : l02_garbage
[10/20/24 10:21:09]	! CURRENT game point position : [-57.229004][0.422093][10.744019]
[10/20/24 10:21:09]	! TARGET LEVEL : l01_escape
[10/20/24 10:21:09]	! TARGET  game point position : [-211.235229][-19.935835][-140.098785]
[10/20/24 10:21:09]	! Target point mask [1][0][0][0]
[10/20/24 10:21:09]	! Object masks (3) :
[10/20/24 10:21:09]	!   [8][1][255][255]
[10/20/24 10:21:09]	!   [12][1][255][255]
[10/20/24 10:21:09]	!   [255][0][255][255]

И иногда вылеты.

2 часа назад, Pavel_Blend сказал:

Откуда они взялись? Они содержат только граф поинты и их данные хранятся в game.graph.

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

 

3 часа назад, Pavel_Blend сказал:
[10/20/24 10:21:09]	! Cannot build GAME path! (object gar_stalker_respawn_116830)

Возможно пропали аи-связи между локациями и НПЦ не может найти путь со свалки на кордон.

храи вроде пишет в лог все найденных/ненайденных связях между локациями.

  • Нравится 1
  • Полезно 1
3 часа назад, abramcumner сказал:

асдс видит их в гейм.графе

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

 

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

Возможно пропали аи-связи между локациями

то же загадка, так как я ничего не удалял. Смотрел в лог и в нём нет информации о ненайденных связях.

 

Вообще я пытаюсь взять оригинальный all.spawn и начать с ним работать через СДК. Всё скомпилировал без изменений, но есть ошибки в игре. Кто-то до меня этим занимался? Или все моды сделаны с помощью acdc? Просто есть некоторые проблемы, которые невозможно нагуглить. Я думал, что много кто пытался править спавн в СДК.

18 минут назад, Pavel_Blend сказал:

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

У ГСЦ локации были. Гейм.граф собирали с учетом этих локаций, спавн без них. Может даже эти локации можно найти в каком-нибудь сливе.

 

20 минут назад, Pavel_Blend сказал:

Вообще я пытаюсь взять оригинальный all.spawn и начать с ним работать через СДК.

Это не так уж и просто. Не уверен, что это вообще кому-нибудь удавалось :)

Как ты его преобразовывал в формат СДК?

Правильный тулчейн какой-то такой:

 - разбить асдс all.spawn на level.spawn

 - конвертером декомпилить все локации(level.spawn преобразуется в spawn.part)

 - открыть каждую локацию в СДК, сделать make game, ...

- пройтись по все локациям храи

- собрать храи гейм.граф, алл.спавн.

 

И при этом возможно потеряется один граф-поинт под ЧАЭС :)

21 минуту назад, abramcumner сказал:

Правильный тулчейн какой-то такой

да, я именно так и делал. Использовал компиляторы skyloader'а.

  • Нравится 1

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

Хочешь выложи, вроде были утилиты для просмотра связей между локациями.

@abramcumner я всю папку gamedata скинул: https://disk.yandex.ru/d/zWj-qcufXL1lwQ

Это для ТЧ 1.0006. Можешь зайти на свалку или бар и в консоли будет красный текст.

 

А какие программы есть для просмотра связей? ggtool? У меня он не работает, видимо Perl не той версии.

Такое ощущение, что у тебя кучи аи-связей не хватает:

0(l01_escape) <=> 415(l02_garbage)
1(l01_escape) <=> 252(l02_garbage)
254(l02_garbage) <=> 701(l03_agroprom)
255(l02_garbage) <=> 1168(l05_bar)
256(l02_garbage) <=> 816(l04_darkvalley)                   256(l02_garbage)  => 816(l04_darkvalley)
414(l02_garbage) <=> 1307(l05_bar)
654(l03_agroprom) <=> 718(l03u_agr_underground)            654(l03_agroprom)  => 718(l03u_agr_underground)
811(l04_darkvalley) <=> 1167(l04u_labx18)                  811(l04_darkvalley) <=  1167(l04u_labx18)
1246(l05_bar) <=> 1545(l07_military)
1248(l05_bar) <=> 1308(l06_rostok)
1409(l06_rostok) <=> 1460(l08_yantar)                      1409(l06_rostok)  => 1777(l08_yantar)
1461(l08_yantar) <=> 1540(l08u_brainlab)                   1778(l08_yantar) <=> 1857(l08u_brainlab)
1528(l08_yantar) <=> 2116(l10_radar)                       1845(l08_yantar) <=> 2116(l10_radar)
1547(l07_military) <=> 1867(l10_radar)                     1440(l07_military)  => 1867(l10_radar)
1865(l10_radar) <=> 2271(l11_pripyat)                      1865(l10_radar) <=  2402(l11_pripyat)
1977(l10_radar) <=> 2791(l10u_bunker)                      1977(l10_radar) <=> 2247(l10u_bunker)
2272(l11_pripyat) <=> 2400(l12_stancia)
2385(l12_stancia) <=  2466(l12u_sarcofag)
2465(l12u_sarcofag) <=> 2468(l12u_control_monolith)        2595(l12u_sarcofag)  => 2598(l12u_control_monolith)
2470(l12u_control_monolith) <=> 2660(l12_stancia_2)        2600(l12u_control_monolith) <=  2790(l12_stancia_2)
2814(ai_test)  => 2873(ai_test2)
2829(ai_test) <=  2858(ai_test2)
3394(l03_agroprom_hw) <=> 3417(l03u_agr_underground_hw)

Слева из ТЧ, справа связи из твоего геймграфа. Многих не хватает. И похоже некоторые односторонние.

 

Утилит как-то не нашел. Добавил в конвертер. Запускать: converter -links game.graph.

https://disk.yandex.ru/d/7wQHW3t7dQ3l5w

Изменено пользователем abramcumner
  • Нравится 2
  • Полезно 1

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

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

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

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

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

Войти

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

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

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

×
×
  • Создать...