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

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


KD87

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

Возможно ли распаковать level.spawn с помощью ACDC? При попытке распаковки такового ругается.

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

Reference to invalid group 0 in regex; marked by

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

log inited: console
Universal ACDC v.1.38
opening level.spawn...
reading alife objects...
handling error with stalker, template C

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

 

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

Осенний каламбур. Сентябрь - лето.

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

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

@WolfHeart Всяко-разно пробовал. Только с level.spawn проблемы. С all.spawn всё работает отлично. 

Осенний каламбур. Сентябрь - лето.

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

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

Народ, кто пробовал декомпилировать спавн от OLR 3.0?

Постоянно на секции veh_btr вылетает, прописывал вручную - не помогает.

Лучше сделать мод с 0, чем пытаться залатать багованный.

DarkSnowder.gif

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

@KD87 Привет.

 

Нашёл один баг в acdc 1.38:

 

Если разбить all.spawn на level.spawn'ы, то в СДК custom data будет напечатана в одну строку. Как я понял, это связано с тем, что в итоговых level.spawn файлах символ новой строки записан в виде одного символа \r, а нужно записывать \r\n.

 

btsOrCW.jpeg

 

Если custom dat'у скопировать и вставить в Notepad++, то текст будет на нескольких строках. Я потом обратно в СДК копирую его. Но это не главная проблема. Основная проблема в том, что в игре от таких строк какие-то баги непонятные. Сталкеры иногда стоят на месте и появляются вылеты. Я написал свой скрипт, который чинит custom dat'у и багов стало меньше, но они всё равно есть. Может не все строки починил.

 

EANLwyN.jpeg

 

Можешь исправить этот баг? Из-за него не получается полноценно пользоваться скриптами. Я хотел декомпилировать all.spawn и без изменений скомпилировать с помощью СДК+xrAI. Ничего не менял, а баги появились.

 

all.spawn разбивал на level.spawn с помощью такой команды:

 

universal_acdc.pl -split all.spawn -way

  • Полезно 1
Ссылка на комментарий

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

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

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
Ссылка на комментарий

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

 

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

Изменено пользователем Pavel_Blend
Ссылка на комментарий
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
Ссылка на комментарий

Как в 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
Ссылка на комментарий
3 часа назад, abramcumner сказал:

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

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

 

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

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

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

 

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

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

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

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

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

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

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

Войти

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

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

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

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