Автор Тема: Различные скрипты, программы и т.д  (Прочитано 34109 раз)

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #45 : Ноября 17, 2025, 04:21:51 pm »
Код для массового экспорта DFF файлов из сцены. Примечание: следующий код экспортирует ВСЕ модели из сцены без исключения. Код для экспорта может применяться как для одиночных мешей (например модели карты), так и для составных (например модели авто).
Код для СТАНДАРТНЫХ скриптов Кама!
В папке /scripts/GTA_TOOLS открываем GTA_DFF_IO.MS блокнотом.
В самом начале файла вставляем вот эту функцию:
    function selectHierarchy =
    (for p in selection do
    (if p.children != undefined do (selectmore p.children)))
Далее находим строку:
button exp "Export DFF" width:120 height:30 tooltip:"Only selected objects will export" align:#centerПосле нее вставляем следующую строку:
button exp2 "Export ALL" width:120 height:30 tooltip:"ALL the objects of the scene will be exported" align:#centerДалее находим строку:
on exp pressed do (Выше строки вставляем следующий код:
on exp2 pressed do (
colcase = 0
if noCOL.checked == true then colcase = 1
if Vparts.checked == true then colcase = 2
dir = getSavePath caption:"Select Export Path"
if dir!=undefined do (
RootArray = #()
for i in objects do (if i.parent==undefined then append RootArray i)
for i in RootArray do (
gc()
select i
root_name = i.name+".dff"
selectHierarchy()
RootObj = checkRoot $selection
if eVC.checked == true then        ver = 0x0C02FFFF            --VC Version
                                if eGTA3.checked == true then    ver = 0x0800FFFF            --Standard GTA3 Version
                                if eSA.checked == true then        ver = 0x1803FFFF            --SA Version
bkupRootTran = RootObj.transform
expscale = RootObj.scale * ExSc.value
RootObj.transform = matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0]
fname = dir + "\\" + root_name
f = fopen fname "wb"
DFFout f $selection MMC.checked TUV.checked CPV.checked NOR.checked expscale ver SAColBase colcase lockdff.checked
fclose f
                                format "<<FILE % Exported>>\n" root_name
)
)
)
Сохраняем файл.
При экспорте указать папку, куда будут сохраняться .dff файлы.
Для быстрого экспорта моделей рекомендуется использовать 3ds max 2024.
P.S. Код использовал для экспорта моделей карты Liberty City из GTA IV.

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #46 : Ноября 17, 2025, 04:42:44 pm »
Код для массового импорта .dff моделей из папки.
Код для СТАНДАРТНЫХ скриптов Кама!
В папке /scripts/GTA_TOOLS открываем GTA_DFF_IO.MS блокнотом.
Находим стандартную функцию импорта:
on imp pressed do (
fname = getopenfilename caption:"Read DFF File" types:"dff File (*.dff)|*.dff|"
if fname != undefined then (
f = fopen fname "rb"
if f == undefined then ( Messagebox "Can't open the file!" title:"I/O Error" )
else (
no_clump = checkClump f
if no_clump == undefined then
messagebox "This DFF is locked !\nThe author of this model do not allow you to modify it.\n\nPlease contact the author for the permission." title:"Import Failed"
else if no_clump.count == 0 then messagebox "Not a Void DFF file!" title:"File Format Error"
else (
if no_clump.count == 1 then (
texEx = case textype.state of (
1: ".tga"
2: ".bmp"
3: ".png"
)--end case
DFFin f ISc.value texEx dummysize autoskin.checked aboutRoll.sdtl.checked (getFilenameFile fname)
useclump.enabled = false
whichone.enabled = false
) else (
fclose f
whichone.range = [1,no_clump.count,1]
whichone.enabled = true
useclump.enabled = true
txt = "This DFF has " + no_clump.count as string + " Clumps.\nPlease choose one to Import!"
Messagebox  txt title: ""
)
)--end if/else no_clump
)--end if/else f
)
fclose f
gc()
)--end on imp
ЗАМЕНЯЕМ функцию на эту:
on imp pressed do (
main_prog.value=0
if massimp.checked == false then (
global showdetail = true
fname = getopenfilename caption:"Read DFF File" types:"dff File (*.dff)|*.dff|"
if fname != undefined then (
f = fopen fname "rb"
if f == undefined then ( Messagebox "Can't open the file!" title:"I/O Error" )
else (
no_clump = checkClump f
if no_clump == undefined then (
-- messagebox "This DFF is locked !\nThe author of this model do not allow you to modify it.\n\nPlease contact the author for the permission." title:"Import Failed"
-- else if no_clump.count == 0 then messagebox "Not a Void DFF file!" title:"File Format Error"
)
else (
if no_clump.count == 1 then (
texEx = case textype.state of (
1: ".dds"
2: ".bmp"
3: ".png"
)--end case
DFFin f ISc.value texEx dummysize autoskin.checked aboutRoll.sdtl.checked (getFilenameFile fname)
useclump.enabled = false
whichone.enabled = false
) else (
fclose f
whichone.range = [1,no_clump.count,1]
whichone.enabled = true
useclump.enabled = true
txt = "This DFF has " + no_clump.count as string + " Clumps.\nPlease choose one to Import!"
Messagebox  txt title: ""
)
)--end if/else no_clump
)--end if/else f
)
fclose f
gc()
) --massimp checked
else (
impdir = getSavePath caption:"select import path"
if impdir !=undefined then (
impdir = impdir+"/*.dff"
dfffiles = getFiles impdir
for fname in dfffiles do (
main_prog.value = 100.0*(finditem dfffiles fname)/dfffiles.count
gc()
f = fopen fname "rb"
                                                        format "<<Import DFF % ... !>>\n" fname
no_clump = checkClump f
if no_clump == undefined then (
-- messagebox "This DFF is locked !\nThe author of this model do not allow you to modify it.\n\nPlease contact the author for the permission." title:"Import Failed"
-- else if no_clump.count == 0 then messagebox "Not a Void DFF file!" title:"File Format Error"
)
else (
if no_clump.count == 1 then (
texEx = case textype.state of (
1: ".dds"
2: ".bmp"
3: ".png"
)--end case
DFFin f ISc.value texEx dummysize autoskin.checked aboutRoll.sdtl.checked (getFilenameFile fname)
                                                useclump.enabled = false
whichone.enabled = false
) else (
fclose f
whichone.range = [1,no_clump.count,1]
whichone.enabled = true
useclump.enabled = true
txt = "This DFF has " + no_clump.count as string + " Clumps.\nPlease choose one to Import!"
Messagebox  txt title: ""
)
)--end if/else no_clump
)
)
else (Messagebox "Can't open the file!" title:"I/O Error")
)
main_prog.value=0
)--end on imp
Находим строку:
button imp "Import DFF" width:120 height:30 align:#leftПосле нее вставляем строки:
checkbox massimp "Mass Import via Folder" align:#left
progressbar main_prog color: orange

Сохраняем файл.
При импортировании ставим галочку "Mass Import via Folder" и выбираем папку с .dff файлами.
Примечание: мультикламп модели не смогут импортироваться.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 720
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Различные скрипты, программы и т.д
« Ответ #47 : Ноября 18, 2025, 07:55:19 am »
Вау, крутяк!
Надо будет затестить, как будет время.
Спасибо

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #48 : Ноября 20, 2025, 07:59:31 pm »
Небольшое исправление в скриптах Кама, с помощью которого можно импортировать "неправильные" DFF, сделанные в ZModeler2, а также заблокированные .dff файлы.
Напоминаю: ТОЛЬКО ДЛЯ СТАНДАРТНЫХ СКРИПТОВ КАМА.
В папке /scripts/GTA_TOOLS открываем GTA_DFF_IO.MS блокнотом.
Находим строки:
if DFFinInfo == undefined then fileIn (scriptspath+"\\GTA_Tools\\CharDFFimp.mse") quiet:true
else if DFFinInfo() != 051215 then fileIn (scriptspath+"\\GTA_Tools\\CharDFFimp.mse") quiet:true
Заменяем на:
if DFFinInfo == undefined then fileIn (scriptspath+"\\GTA_Tools\\CharDFFimp.ms") quiet:true
else if DFFinInfo() != 051215 then fileIn (scriptspath+"\\GTA_Tools\\CharDFFimp.ms") quiet:true
Сохраняем файл.
Далее скачиваем приложенный CharDFFimp.ms и кладем в папку с GTA_DFF_IO.MS.

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #49 : Ноября 20, 2025, 09:39:37 pm »
Open Formats I/O с возможностью массового импорта OFT ODR OBN OBD ONV.
Переделанная версия от 4 марта 2021 года. Дописывал кнопки под свои нужды.
В соответствующих разделах меню OFIO добавляются кнопки массового импорта OFT ODR OBN OBD ONV (Batch Import).
Также небольшое изменение в ofio.ext.tools.ms
- функция OF IV Drawable Mat to Standard Mat заменена на функцию OF IV Drawable Mat to GTA_MTL (см. посты выше).
Оригинальный скриптпак OFIO - (C) Alexander Blade, MIXAZZZ

Оффлайн GHOST

  • Прохожий
  • *
  • Сообщений: 83
  • Репутация: +16/-0
  • RUS-CASA (2008 - 2010)
    • Просмотр профиля
https://www.mixmods.com.br/2022/04/improved-streaming/ для GTA III, приложен исходный код (.txt), автор: Baneman

Друга нельзя купить, но его можно продать...

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #51 : Февраля 02, 2026, 05:22:08 pm »
Vice City PATHS IO сборка февраль 2026. Скрипт для 3dsMAX!
Данный скрипт написан для работы с трафиком GTA Vice City - полностью поддерживается импорт и экспорт путей Vice City.
Эта версия тестовая, возможны ошибки и глюки. О любых ошибках и всевозможных глюках сообщать мне в личку. Пожелания и рекомендации приветствуются.

Изменения в версии 05.26 (обновление 02/02/2026):
- Полностью переписан код импорта и экспорта путей GTA Vice City - теперь можно редактировать стандартный paths.ipl без каких-либо последствий в стандартной игре.
- Переписан код импорта путей GTA 3 (по аналогии кода импорта путей Vice City)
- Переписан код конвертации путей GTA 3 в paths.ipl для GTA Vice City
- Появилась поддержка многосплайновых путей (при этом максимальное количество точек всех сплайнов пути не должно превышать 12)
- Автоматическое распознавание перекрестков (пересечений путей) - но только внутри одного сплайна; теперь не нужно создавать перекрестки способом, описанным в .docx файлах.
- В связи с выходом скрипта импорта/экспорта путей GTASA от ZZpuma было принято решение отказаться от импортирования путей GTASA в формате, пригодном для редактирования скриптом Дениски. Пути GTA SA импортируются ТОЛЬКО в формате Vice City!
- Также было принято решение отказаться от кода импорта путей формата Fastman92 - в Vice City пока нет возможности сделать границы путей бесконечно больших размеров.
- Небольшие изменения кода импорта путей GTA SA - небольшие изменения и сокращение кода, убраны лишние функции, дописана загрузка параметров.
- Сделана отдельная версия скрипта на русском языке (vc_paths_io_3dsMax2024_RU.ms). Она проверена только на 2024 версии 3dsmax. на более старших версиях скрипт может на загрузиться!
Используйте английскую версию скрипта (vc_paths_io_3dsMax2008+.ms), если вы используете более старые версии 3dsmax, вплоть до 2010!
 
Установка:
Для обычной версии скрипта (vc_paths_io_3dsMax2008+.ms) - распаковать vc_paths_io_3dsMax2008+.ms в любое место, запускать через Maxscript - RUN Script.
Для русскоязычной версии: файл vcpathsio.ini закинуть в папку 3dsmax/Scripts/ (например C:\Program Files\Autodesk\3ds Max 2024\scripts), файл vc_paths_io_3dsMax2024_RU.ms можно распаковать в любое место и запускать через Maxscript - RUN Script.

Описание скрипта:

Скрипт для работы с paths.ipl (и не только).
Для работы требуется: 3dsMax 2008 и выше.
Возможности:
- Импорт путей GTA VC, GTA3, GTA SA;
- Экспорт путей GTA VC (экспорт всех типов линий, поддерживаемых игрой (от 2-х до 12 точек включительно));
- Импортирование путей GTA SA в формате Vice City/3 (см.ниже);
- Возможность назначать тип пути (педы, тачки, лодки) каждой линии. Если не назначен тип пути, скрипт автоматически назначит тип, исходя из значения Default Path Type;
- Возможность работы с перекрестками.
- Возможность менять параметры у каждой линии/точки. Для изменения параметров достаточно выбрать линию. Все изменения будут автоматически сохранены;
Не нужно самому всё вбивать - если настройки линии не назначены, скрипт автоматически их сгенерирует;
- Возможность импорта/экспорта .dat файлов путей из папки data/paths;
- Кнопки выбора путей по их типу (выбор всех путей трафика/педов/лодок);
- Возможность конвертации VC Paths.ipl в формат путей GTA 3;
- Конвертация путей GTA 3 в формат GTA VC;
- Отображение номеров вертексов редактируемой линии во вьюпорте;
- Отображение флагов пути, числа полос, координат и ширины пути во вьюпорте;
- Функция смены направления движения пути;
- Функция назначения направления движения пути (одностороннее/двустороннее);
- Функция разбивки линий с числом точек, больше 12 (для выбранных линий);
- Функция сброса параметров линий (для выбранных линий);
- Функция включения/отключения автомобильного трафика.
- Функция автоматической настройки перекрестков на основе примыкающих к ним линий (функция еще не дописана должным образом).
- Функция удаления "неправильных" линий с числом точек меньше 2.

Поддерживаемый тип линий Splines - Line. Initial Type - Corner. Drag Type - Bezier.
Не применяйте модификаторы к линиям! Это может привести к невозможности нормально экспортировать пути и создавать перекрестки.
Для более удобного прописывания путей используйте привязки в 3dsMax (см. подробнее .docx файлы).

Пример создания путей для GTAVC описан в paths_tutorial[RU].pdf

Скрипт полностью поддерживает импорт и экспорт путей GTA VC.
Скрипт поддерживает импорт путей GTA3  - только импорт, для экспорта необходимо экспортировать пути в формат Vice City, и далее отконвертировать в формат GTA3.
Скрипт поддерживает возможность конверта paths.ipl в формат путей GTA 3.
Для этого необходимо указать стартовый ID пути, префикс для моделей путей, имя для IPL IDE COL, множитель координат путей, с которым экспортировался paths.ipl (для стандартного .exe равен 16)
После чего выбрать директорию, куда будут экспортироваться файлы путей GTA 3 и последним шагом выбирается paths.ipl.
Скрипт уведомит о завершении процесса конвертации. Файлы IPL IDE COL полностью готовы для добавления в игру.
Не рекомендуется использовать эту функцию для редактирования стандартных путей!
Желательно использовать функцию для создания путей новой карты или добавления новых путей к оригинальным путям.

Обратите внимание, что при добавлении путей в GTA 3 при наличии оригинальных необходимо повышать лимит аджастером Dynamic Limits: Buildings, PtrNodes, EntryInfoNodes, Treadables; [Pool Limits]: Objects Models; лимит по DFF файлам [ID LIMITS].
Для этого используйте Limit Adjuster by Vitlgt. Также стоит установить параметр "Enable path limits patch=1" и повысить максимальный ID в блоке PATH LIMITS.
Для повышения лимита путей в Vice City необходимо использовать Maxorator's Path hack.

Скрипт поддерживает возможность конвертации путей GTA3 в формат Vice City.
Для этого необходимо выставить множители путей GTA3 и Vice City, после этого указать директорию GTA3 и путь для сохранения Paths.ipl.
После этого нажать кнопку Convert.
Следует обратить внимание на то, что получаемый размер файла путей больше оригинального, тем самым для работоспособности путей потребуется Maxorator's Path Hack (vcpathlimit.flt).

Скрипт поддерживает импорт путей GTA SA, но только в формате для последующей работы и экспортирования в GTA VC/GTA 3!
После импортирования путей потребуется их ручная доработка! А именно потребуется перепроверка всех флагов путей в том числе и проверка направления движения, поскольку пока что не удалось написать нормальный алгоритм импортирования путей и их настроек.
Потребуется также проверка перекрестков, ввиду возможного наложения сегментов рядом стоящих перекрестков - наличие наложенных сегментов может повлечь за собой вылет игры.

При создании новой линии пути скрипт автоматически назначает ей настройки, исходя из параметров в блоке Default Parameters!
Обратите внимание, что параметры Lanes для внутренних точек всегда равны 1 1! Для назначения направления движения и количества полос достаточно редактировать только конечные (внешние) точки.
Или используйте кнопки set one-way/set two-way traffic для назначения одностороннего или двустороннего движения и используйте кнопку Change the direction of traffic для смены направления движения.
Для отображения параметров линий во вьюпорте используйте вкладку Display helper. Для отображения доступны - номера точек, число полос, флаги, ширина пути, координаты точек.

Для сброса параметров по умолчанию у выделенных линий используйте функцию Reset User Properties.
Для экспорта трафика достаточно выбрать линии и нажать кнопку Export Paths. Готовые строки для Paths.ipl будут выведены в окне MAXScript Listener (в левом нижнем углу 3Ds max или нажмите F11 для вызова MAXScript Listener).
Стоит обратить внимание на то, что скрипт автоматически проигнорирует сплайны, у которых число уникальных узлов меньше двух или больше 12!

Скрипт имеет возможность создавать перекрестки.
Для этого нажать кнопку create dummys at line ends, далее выбрать дамми перекрестка (можно даже выделить и сплайны), нажать кнопку create crossroad.
От пользователя потребуется лишь настроить его параметры. Для удаления дамми нажать кнопку delete all dummy.

Краткое описание кнопок:
Set Ped - назначить линии трафик пешеходов.
Select all Ped Paths - выбрать все пути пешеходов.
Set Car - назначить линии трафик авто.
Select all Car Paths - выбрать все пути авто.
Set Boat- назначить линии трафик лодок.
Select all BoatPaths - выбрать все пути лодок.
Select All Paths - выбрать все пути.
Import GTAVC Paths - импортировать пути GTAVC.
Import GTA3 Paths - импортировать пути GTA3.
Import GTASA Paths - импортировать пути GTASA.
Create CrossRoad - создать перекресток (на основе вспомогательных дамми или на основе выделенных точек сплайнов)
Set CrossroadPath name - Обозначить путь как перекресток. При неправильной настройке перекрестка скрипт проигнорирует эту линию.
Create dummy at line ends - создать дамми на концах линий. Полезно для создания перекрестков.
Delete all dummy - удалить все вспомогательные дамми.
Display vertex number - отображать во вьюпорте номера точек путей (при условии что число точек в линии лежит в интервале от 2 до 12 включительно).
Display Lanes - отображать во вьюпорте число полос линии.
Display width - отображать во вьюпорте ширину пути.
Display flags - отображать во вьюпорте флаги путей.
Display XYZ coordinate - отображать во вьюпорте координаты точек.
Import .dat - импортировать .dat файл путей flightX.dat/tracksX.dat/spathX.dat.
Export .dat - экспортировать .dat файл путей.
Split lines - преобразовать выбранные линии в формат путей GTAVC/III.
Reset user properties - сбросить все настройки у выбранной линии.
Enable Traffic - включить трафик (выставляет флаг 0)
Disable Traffic - выключить трафик (выставляет флаг 1)
Delete zero shapes - удаляет неправильные линии с числом точек меньше 2.
Reverse knot order - изменяет приоритет точек.
set one way traffic - сделать одностороннее движение.
set two way traffic - сделать двухстороннее движение.
Change direction traffic - изменить направление движения.
Assign Line Parameter for Crossroad by lines - настроить число полос у перекрестков на основе примыкающих к ним линий. Не работает в случае примыкающих друг к другу перекрестков!
Select Directory - выбрать директорию для экспорта файлов путей GTA3.
Select ViceCity paths.ipl - выбрать Vice City paths.ipl для его преобразования в формат путей GTAIII.
Select GTA3 Dicrectory - выбрать папку с установленной GTA3.
Select save path for Paths.ipl - выбрать путь для сохранения Paths.ipl
Скрипт поддерживает импорт и экспорт .dat файлов путей GTA 3 или GTA Vice City из папки data/paths, а именно flightX.dat, tracksX.dat, spathX.dat, где X - номер файла.
Для экспорта необходимо выбрать ОДНУ линию пути и нажать экспорт. Скрипт предложит выбрать файл для сохранения.
Скрипт написал: aleks926820 (C) 2022-2026.
Благодарности: Shagg_E; Starenat - за поддержку при написании скрипта.
Отдельное спасибо: Ilufir - за помощь со структурой путей GTASA, ZZPuma - за информацию о светофорах путей GTASA.
Используется код скрипта SA Path Tool авторства Deniska.
СКАЧАТЬ: https://disk.yandex.ru/d/GNWtIdeIhp5qrw
« Последнее редактирование: Февраля 06, 2026, 05:21:33 pm от aleks926820 »

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #52 : Августа 20, 2026, 10:16:58 pm »
COL IO с возможностью массового экспорта и импорта col файлов. Автор оригинального скрипта - Kam. Дописал функции - aleks926820.
Возможно будут какие-то изменения. ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК. Я НЕ НЕСУ ОТВЕТСТВЕННОСТИ ЗА ИСПОРЧЕННЫЕ ФАЙЛЫ МОДЕЛИ И ТД НА ВАШЕМ КОМПЬЮТЕРЕ.
Переписана немного функция экспорта и импорта коллизии. Скрипт не заменяет оригинальный .mse файл!

Изменения:
- Информация о коллизии теперь загружается немного по-другому. Создается корневой дамми с именем объекта, а к нему в иерархии цепляются меш коллизии (CM_+имя объекта), Bounding Box и Bounding Sphere, меш тени (SM_+ имя объекта), а также сферы и боксы коллизии.


- Раскомментирована скрытая кнопка COL Convertion - с помощью ее можно массового конвертировать колы. Толком не тестировал.
- Добавлена кнопка Load ALL - загружает всю информацию о коллизии в сцену. Для загрузки - нажать Open Collision File, далее нажать Load all.
- Export to single files - экспортирует коллизию в каждый файл. Выберите вспомогательные дамми объектов перед экспортом! (см.фото выше)
- Export to combined file - экспортирует коллизию в выбранный файл. Выберите вспомогательные дамми объектов перед экспортом! (см.фото выше)
- Skip mesh - игнорировать информацию о меше коллизии и меше тени  при экспорте (меш коллизии с именем CM_+имя объекта и меш тени SM_+имя объекта). Внимание! При активированной кнопке Skip Mesh Bounding Box/Sphere и сферы/боксы коллизии не игнорирутся при экспорте!
- Exp All - при активированной кнопке экспортируются ВСЕ элементы коллизии из сцены.
- Export COL from meshes - экспорт коллизии на основе выбранных объектов. Достаточно загрузить дфф в сцену, выбрать ТОЛЬКО геометрию (без дамми, источников света и тд), и нажать эту кнопку. Для каждого меша будет экспортирован свой .col файл.
При использовании "новых" кнопок экспорта есть возможность создать пустые кол файлы -  с учетом границ объекта и без учета границ объекта. Примеры иерархии на фото ниже:




Для учета границ пустого кола необходимо вложить Bounding Box и Bounding Sphere. Чтобы не учитывать - оставляем только дамми с именем объекта.
Для полноценного экспорта кол файла необходимо вложить еще меш коллизии с приставкой CM_в имени объекта, и (при необходимости) вспомогательные сферы и боксы (см.выше).

Для работы нужен оригинальный пак скриптов Кама. Для работы достаточно положить скрипт в любое удобное место и запускать через MaxScript - Run script.
« Последнее редактирование: Августа 20, 2026, 11:46:18 pm от aleks926820 »

Оффлайн aleks926820

  • Прохожий
  • *
  • Сообщений: 50
  • Репутация: +15/-0
    • Просмотр профиля
Re: Различные скрипты, программы и т.д
« Ответ #53 : Августа 21, 2026, 05:35:32 am »
Код для генерации хэш-кодов по алгоритму Дженкинса в MaxScript. Может быть полезно при работе с ресурсами GTA 4. https://en.wikipedia.org/wiki/Jenkins_hash_function
DLL сделал - TheInsaneKiller.
Код для MaxScript - TheInsaneKiller, aleks926820.
Тестировалось и проверялось на 3dsmax 2024. На других версиях работа не гарантируется.
Для корректной работы dll в корневой директории 3dsmax открываем 3dsmax.exe.config.
Ищем раздел <runtime>.
Там должно быть что-то вроде:
<runtime>
        <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
    </runtime>
Вставляем строку <loadFromRemoteSources enabled="true"/>То есть делаем так:
<runtime>
        <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
<loadFromRemoteSources enabled="true"/>
    </runtime>
Сохраняем файл.
Далее из аттача скачиваем JenkinsHash.dll и кладем его куда-нибудь, например на диск F:.
Далее запускаем 3dsmax, выбираем Scripting->Scripting Editor, далее File->New и вставляем код:
fn jenkins_gethashcode val = ( --объявляем нашу функцию. В нее мы будем отсылать строку val.
enc = (dotNetClass "System.Text.Encoding").UTF8 --вызываем класс для работы с текстом
a1 = enc.GetBytes (dotNetObject "System.String" val) --преобразуем строку val в массив байт методом GetBytes()
 r = dotnet.loadassembly "F:/JenkinsHash.dll" -- грузим DLL для вызова класса jenkins.jenkins. Здесь нужно указать путь к .dll файлу.
 jenkinsclass = dotnetclass "Jenkins.Jenkins" -- вызываем класс из DLL файла для генерации хэш-кода
  a2 = jenkinsclass.JenkinsOneAtATime(a1) -- первый метод. Возвращает хэш как целое число. В функцию отсылается массив байт.
  a3 = jenkinsclass.JenkinsOneAtATimeHex(a1) --второй метод. Возращает хэш как шестнадцатеричное число. В функцию отсылается массив байт.
 return ("0x"+a3) -- здесь можно написать return a2, чтобы хэш возвращался как обычное число. Здесь хэш возвращается как шестнадцатеричное число.
)


Для примера функцию можно вызвать так - ниже функции вставляем эти строки и жмем CTRL+E (запуск скрипта).

jenkins_gethashcode "bm_ammobox_02a"
jenkins_gethashcode "bm_ammobox_03b"
jenkins_gethashcode "bm_ammobox_04a"
jenkins_gethashcode "bm_ammobox_05"
jenkins_gethashcode "bm_ammobox_07"

Результат работы:
bm_ammobox_02a 0x98297fb3 --хэш в виде шестнадцатеричного числа
bm_ammobox_03b 0x760eac86
bm_ammobox_04a 0x4834545e
bm_ammobox_05 0x3136982d
bm_ammobox_07 0x1deaf186

bm_ammobox_02a 2552856499 --хэш в виде целого числа
bm_ammobox_03b 1980673158
bm_ammobox_04a 1211389022
bm_ammobox_05 825661485
bm_ammobox_07 501936518

Напрямую в Maxscript не удалось реализовать алгоритм Дженкинса из-за ограничения диапазона целых чисел в Maxscript (-2147483648...2147483647) - при работе кода возникало переполнение, что приводило к возвращению неправильных чисел, и, как следствие, к неверному хэш-коду.
« Последнее редактирование: Августа 21, 2026, 05:38:59 am от aleks926820 »