Что нового

Автоматизация Замена части HEX в одном файле на полное содержимое из другого

Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
ясно что нужно любой. на выбор.
для этого и выведена вторая колонка. куда устанавливать указатель в файле для перезаписи участка. я подобный код (идею) уже писал как то
сейчас нужно проверка работоспособности на примерных файлах. далее уже будет через кнопки в окне.
лучше проверять готовый файл в программе, которая их использует. там будет видно, корректно или нет
это конечно!

вообще это файл с характеристиками авто для игры Мафиа. у меня на форуме пользователи создают машины и соответствующие характеристики. но вот удобного способа использовать эти характеристики нет.
я пытаюсь придумать простой способ в 2 клика. спасибо что помогаете!
Сообщение автоматически объединено:

я подобный код (идею) уже писал как то
мощно! :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
тестовый вариант. только поиск не работает пока
для запуска файл ReWrBin.au3
версия autoit 3.3.12.0 или бета
тест перезаписанного файла лучше делать в игре. обязательно протестить перезапись разделов в блоках с одним разделом и несколькими.
 

Вложения

  • RWVeh.7z
    7 КБ · Просмотры: 6

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Pазве редактор что вы упомянули не умеет загружать .rcar файлы? 1574085385770.png

Вариант с использованием _WinAPI_ReadFile/_WinAPI_WriteFile
Для отображения доп. имен создайте рядом со скриптом Settings.ini с содержанием такого типа
Settings.ini:
[Names]
alfa8C=Caesar 8C Mostro
 

Вложения

  • Script.au3
    10.8 КБ · Просмотры: 1
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Возможно, автор хочет свой RHAM написать.)
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Это выглядит и работает отлично! проверил и в игре - всё без каких-либо проблем.
единственный момент - я хочу сократить количество кликов до возможного минимума. существует масса программ, которые позволяют даже создавать свои модели машин в базе, заводить разные типы и т.д. - это сложно, долго и для моих целей не очень нужно. нужно очень просто, чтобы включать этот скрипт в архив с машинкой - пользователь запустил, выбрал что хочет заменить и получил замену и наслаждение :smile:

на самом деле вы навели меня на идею.

у меня есть сайт, на котором я собираю модификации машин для мафии. сейчас каждый архив с машинкой представляет из себя набор стандартных папок (maps, models, tables, anims). чтобы установить машинку в игру пользователю нужно не просто распаковать всё содержимое в папку с игрой. нужно ещё переименовать файл модели в имя файла той машины, которую хочется заменить, но затем есть же ещё характеристики из файла RCAR - вот тут уже сложности, потому что нужно открывать программы.. долго и муторно.

плюс, есть ещё 1 файл, который нужно так же читать/перезаписывать. это carindex.def. там нужны только пункты: настоящее имя машинки показываемое в игре, имя 3d модели тени, имя 3д модели сгоревшего остова. вот структура этого файла:
Код:
--------------------------------------------------------------------------------------
variable        bytes    description
--------------------------------------------------------------------------------------
header          164      заголовок, который нужно пропустить
blockName       32       имя блока, постоянная длина, такое же как и в vehicles.bin
carDamage       32       имя 3д модели сгоревшего остова
carShadow       32       имя 3д модели тени
carName         32       настоящее имя модели показываемое в игре
someInfo        36       другие данные, их нужно пропустить
--------------------------------------------------------------------------------------

так вот, что я придумал:

1. есть архив с машинкой, пользователь его скачивает с моего сайта, открывает архив и видит:
1574123735479.png

2. в редми я напишу, что всё содержимое архива нужно распаковать в папку с игрой и запустить ReWrBin.exe
3. после запуска ReWrBin.exe пользователь видит такое окошко (просто в фотошопе нарисовал):
1574127493615.png

4. в этом окне список Choose new car формируется автоматически, скриптом — скрипт смотрит в папку рядом с собой и ищет файлы с префиксом _cm. В данном примере скрипт находит только 1 файл - _cm_1930_Ford_Model_A_Pickup.ini. возможно если файл только один стоит этот список блокировать, чтобы нельзя было развернуть
5. New can included это выжимка из INI файла. А вот как выглядит этот INI файл:
1574127125398.png
  • name - это имя авто (это имя нужно записать в carindex.def, об этом далее)
  • anims - это привязанные к машинке анимации, их нужно будет проигнорировать, они уже и так лежат там где нужно - в папке anims
  • maps - это привязанные к машинке текстуры в формате PNG или JPG, их нужно будет конвертировать специальной консольной программой в BMP, но они тоже лежат там где нужно - в папке maps
  • colors - самое сложное - файл с моделью машинки. сейчас по этому пути лежит файл ForModAPic00.4ds (машинка игрока), а так же в этой же папке может лежать файл ForModAPic10.4ds (машинка в трафике). да, в игре используется 2 разных модельки для игрока и для трафика - когда игрок садится в машину она из ForModAPic10.4ds становится ForModAPic00.4ds мгновенно. скрипт должен проверять есть ли в паке соответствующая машинка для трафика с суфиксом 10 (в данном случае ForModAPic10.4ds) если этого файла нет, то при нажатии на кнопку Replace скрипт должен копировать ForModAPic00.4ds в два файла и давать им имена файла соответствующего выбранной оригинальной машинке. Цифра 4 в скобках значит, что для этой машины существуют 4 цвета: ForModAPic00.4ds, ForModAPic01.4ds, ForModAPic02.4ds, ForModAPic03.4ds — эти файлы лежат прямо там в папке с первой моделькой
  • damage - файл со сгоревшим остовом машинки, именем этого файла нужно будет заменить оригинальное имя в файле carindex.def
  • shadow - файл с моделью тени для машинки, именем этого файла нужно будет заменить оригинальное имя в файле carindex.def
  • specs - имя файла с характеристиками машинки. эти данные нужно записать из этого файла донора в vehicles.bin. это часть уже полностью работает и заменяет то что нужно
  • sounds - звуки привязанные к машинке, по идее нужно тоже их копировать и переименовывать по образу моделей машины, возможно если всё получится я смогу сам добавить это в код по образу
6. Choose car to replace - это список моделей в игре (89 штук)
7. Итак пользователь выбрал Новую машину, выбрал игровую, которую он будет заменять и жмёт на кнопку Replace. По моей идее происходит следующее:
  1. скрипт получает переменную по имени машинки из vehicles.bin, в данном случае это fordttud
  2. далее скрипт, зная название машинки оригинальной модели из игры соответствующей переменной fordttud (это fordttud00.4ds) копирует файл из [colors] и переименовывает его в fordttud00.4ds
  3. скрипт проверяет, есть ли рядом с файлом \models\ForModAPic00.4ds файл \models\ForModAPic10.4ds:
    • если такой файл есть, то нужно его скопировать и переименовать в fordttud10.4ds
    • если такого файла нет, то нужно скопировать ForModAPic00.4ds и переименовать его в fordttud10.4ds
  4. скрипт смотрит на число в скобках:
    • если там 2, то скрипт проделывает пункты 2 и 3 с файлом \models\ForModAPic01.4ds
    • если там 3 то скрипт выполняет пункты 2 и 3 уже с файлами \models\ForModAPic01.4ds и \models\ForModAPic02.4ds
    • итд
  5. скрипт, используя переменную fordttud ищет это слово в carindex.def. блок (blockName) с именем fordttud самый первый в этом файле
  6. далее скрипт доходит до переменной carDamage, читает её, получает имя fordTrun.I3D и заменяет fordTrun.I3D на ForModAPicDam.i3d (из [Damage]) в пределах отведённых ему 32 байт
  7. далее скрипт доходит до переменной carShadow, читает её, получает имя fordTrunS.i3d и заменяет fordTrunS.i3d на ForModAPicSha.i3d (из [Shadow]) в пределах отведённых ему 32 байт
  8. далее скрипт доходит до переменной carName, читает её, получает имя Bolt Ace Tudor и заменяет Bolt Ace Tudor на 1930 Ford Model A Pickup (из [Name]) в пределах отведённых ему 32 байт
  9. скрипт заменяет спецификации в vehicles.bin на те что в файле ForModAPic.rcar из блока [Specs] в INI файле
8. кнопка дефолт очищает vehicles.bin и carindex.def от вмешательств

это всё. я прикрепил все файлы сюда к сообщению

p.s.: я прошу прощения, что столько понаписал. я изначально думал сделать несколько BAT-скриптов, но подумал, что можно же попробовать использовать автоит и не городить кучи батч-скриптов мучая пользователей
Сообщение автоматически объединено:

поможете мне?
 

Вложения

  • 1574125618337.png
    1574125618337.png
    25.8 КБ · Просмотры: 8
  • 1574125809427.png
    1574125809427.png
    22.2 КБ · Просмотры: 8
  • 1574126117260.png
    1574126117260.png
    22 КБ · Просмотры: 8
  • 1574126860171.png
    1574126860171.png
    21.8 КБ · Просмотры: 9
  • 1574127075424.png
    1574127075424.png
    26 КБ · Просмотры: 9
  • 1930_Ford_Model_A_Pickup.7z
    2.4 МБ · Просмотры: 3
  • tables.zip
    29.3 КБ · Просмотры: 6
Последнее редактирование:
Верх