From 2ef597aaaecd5ffbc4662ea4d8f81c160ac9468a Mon Sep 17 00:00:00 2001 From: kaetemi Date: Sat, 5 Jun 2010 08:49:01 +0200 Subject: [PATCH] Added: Maxscript for automatically fixing paths and png extensions of all max files in the asset database. --- .../scripts/nel_assets_png_batched.ms | 183 +++++++++++++ .../scripts/nel_batched_mergesave.ms | 251 ++++++++++++++++++ 2 files changed, 434 insertions(+) create mode 100644 code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms create mode 100644 code/nel/tools/3d/plugin_max/scripts/nel_batched_mergesave.ms diff --git a/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms b/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms new file mode 100644 index 000000000..b6b5e0434 --- /dev/null +++ b/code/nel/tools/3d/plugin_max/scripts/nel_assets_png_batched.ms @@ -0,0 +1,183 @@ + + +include "nel_utility.ms" + +fn getAbsoluteSource t = +( + return (mapPaths.getFullFilePath ((getFilenameFile (filenameFromPath t)) + ".png")) +) + +fn getAbsoluteDestination t = +( + if ((findString t "\\\\Amiga") != undefined) then + ( + return ("W:\\" + (substring (getFilenamePath t) 11 -1) + "\\" + (getFilenameFile (filenameFromPath t)) + ".png") + ) + else if ((findString t "\\\\amiga") != undefined) then + ( + return ("W:\\" + (substring (getFilenamePath t) 11 -1) + "\\" + (getFilenameFile (filenameFromPath t)) + ".png") + ) + else if ((findString t "W:\\") != undefined) then + ( + return ((getFilenamePath t) + "\\" + (getFilenameFile (filenameFromPath t)) + ".png") + ) + else if ((findString t "\\tronc.") != undefined) then + ( + return "W:\\database\\database_proto\\stuff\\fyros\\objects\\tronc.png" + ) + else if ((findString t "\\trame.") != undefined) then + ( + return "W:\\database\\stuff\\lod_actors\\texture_lod\\trame.png" + ) + else if ((findString t "\\PR_MO_phytopsy_tete01_Boss.") != undefined) then + ( + return "W:\\database\\Stuff\\Tryker\\Agents\\_textures\\monster\\PR_MO_phytopsy_tete01_Boss.png" + ) + else + ( + return t + ) +) + +fn getFixedTexturePath t = +( + if (doesFileExist (getAbsoluteSource t)) then + ( + if not (doesFileExist (getAbsoluteDestination t)) then + ( + makeDir (getFilenamePath (getAbsoluteDestination t)) all:true + renameFile (getAbsoluteSource t) (getAbsoluteDestination t) + ) + if (doesFileExist (getAbsoluteDestination t)) then + ( + if (getAbsoluteDestination t) != (getAbsoluteSource t) then + ( + deleteFile (getAbsoluteSource t) + ) + ) + ) + return (getAbsoluteDestination t) +) + +fn renameTexture t = +( + try + ( + if (t != undefined) then + ( + if (classof t == NelBitmapTexture) then + ( + if (t.bitmap1FileName != "") then (t.bitmap1FileName = getFixedTexturePath t.bitmap1FileName) + if (t.bitmap2FileName != "") then (t.bitmap2FileName = getFixedTexturePath t.bitmap2FileName) + if (t.bitmap3FileName != "") then (t.bitmap3FileName = getFixedTexturePath t.bitmap3FileName) + if (t.bitmap4FileName != "") then (t.bitmap4FileName = getFixedTexturePath t.bitmap4FileName) + if (t.bitmap5FileName != "") then (t.bitmap5FileName = getFixedTexturePath t.bitmap5FileName) + if (t.bitmap6FileName != "") then (t.bitmap6FileName = getFixedTexturePath t.bitmap6FileName) + if (t.bitmap7FileName != "") then (t.bitmap7FileName = getFixedTexturePath t.bitmap7FileName) + if (t.bitmap8FileName != "") then (t.bitmap8FileName = getFixedTexturePath t.bitmap8FileName) + renameTexture t.bitmap + if (t.bitmap.fileName == undefined) then + ( + if (doesFileExist (mapPaths.getFullFilePath t.bitmap1FileName)) then (t.bitmap.fileName = t.bitmap1FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap2FileName)) then (t.bitmap.fileName = t.bitmap2FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap3FileName)) then (t.bitmap.fileName = t.bitmap3FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap4FileName)) then (t.bitmap.fileName = t.bitmap4FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap5FileName)) then (t.bitmap.fileName = t.bitmap5FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap6FileName)) then (t.bitmap.fileName = t.bitmap6FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap7FileName)) then (t.bitmap.fileName = t.bitmap7FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap8FileName)) then (t.bitmap.fileName = t.bitmap8FileName) + ) + else if not (doesFileExist (mapPaths.getFullFilePath t.bitmap.fileName)) then + ( + if (doesFileExist (mapPaths.getFullFilePath t.bitmap1FileName)) then (t.bitmap.fileName = t.bitmap1FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap2FileName)) then (t.bitmap.fileName = t.bitmap2FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap3FileName)) then (t.bitmap.fileName = t.bitmap3FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap4FileName)) then (t.bitmap.fileName = t.bitmap4FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap5FileName)) then (t.bitmap.fileName = t.bitmap5FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap6FileName)) then (t.bitmap.fileName = t.bitmap6FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap7FileName)) then (t.bitmap.fileName = t.bitmap7FileName) + else if (doesFileExist (mapPaths.getFullFilePath t.bitmap8FileName)) then (t.bitmap.fileName = t.bitmap8FileName) + ) + t.delegate.RGBOutput = 0 + t.delegate.monoOutput = 1 + t.delegate.alphasource = 2 + ) + else if (classof t == Reflect_Refract) then + ( + if (t.bitmapName[1] != undefined) then (t.bitmapName[1] = getFixedTexturePath t.bitmapName[1]) + if (t.bitmapName[2] != undefined) then (t.bitmapName[2] = getFixedTexturePath t.bitmapName[2]) + if (t.bitmapName[3] != undefined) then (t.bitmapName[3] = getFixedTexturePath t.bitmapName[3]) + if (t.bitmapName[4] != undefined) then (t.bitmapName[4] = getFixedTexturePath t.bitmapName[4]) + if (t.bitmapName[5] != undefined) then (t.bitmapName[5] = getFixedTexturePath t.bitmapName[5]) + if (t.bitmapName[6] != undefined) then (t.bitmapName[6] = getFixedTexturePath t.bitmapName[6]) + if (t.outputname != undefined) then (t.outputname = getFixedTexturePath t.outputname) + ) + else + ( + if (t.fileName != undefined) then (t.fileName = getFixedTexturePath t.fileName) + if (classof t == BitmapTexture) then + ( + t.RGBOutput = 0 + t.monoOutput = 1 + t.alphasource = 2 + ) + ) + ) + ) + catch + ( + + ) +) + + +rollout assets_png_rollout "Properties" +( + fn do_it = + ( + for m in getClassInstances BitmapTexture do + ( + renameTexture m + ) + + for m in getClassInstances NelBitmapTexture do + ( + renameTexture m + ) + + for m in getClassInstances NelMaterial do + ( + renameTexture m.tTexture_1 + renameTexture m.tTexture_2 + renameTexture m.tTexture_3 + renameTexture m.tTexture_4 + renameTexture m.tTexture_5 + renameTexture m.tTexture_6 + renameTexture m.tTexture_7 + renameTexture m.tTexture_8 + m.delegate.DiffuseMapEnable = m.bEnableSlot_1 + m.delegate.DiffuseMap = m.tTexture_1 + m.delegate.AmbientMapEnable = m.bEnableSlot_1 + m.delegate.AmbientMap = m.tTexture_1 + m.delegate.SpecularMapEnable = m.bEnableSlot_2 + m.delegate.SpecularMap = m.tTexture_2 + m.delegate.SelfIllumMap = undefined + m.delegate.OpacityMap = undefined + m.delegate.FilterMap = undefined + m.delegate.BumpMap = undefined + m.delegate.DisplacementMap = undefined + m.delegate.ReflectionMap = undefined + m.delegate.RefractionMap = undefined + ) + actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps + actionMan.executeAction 0 "40021" -- Selection: Select All + actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected + return 1 + ) + + include "nel_batched_mergesave.ms" +) + +assets_png_floater = newRolloutFloater "NeL Assets PNG Database" 550 874 +addrollout assets_png_rollout assets_png_floater rolledUp:false + diff --git a/code/nel/tools/3d/plugin_max/scripts/nel_batched_mergesave.ms b/code/nel/tools/3d/plugin_max/scripts/nel_batched_mergesave.ms new file mode 100644 index 000000000..5555a93f2 --- /dev/null +++ b/code/nel/tools/3d/plugin_max/scripts/nel_batched_mergesave.ms @@ -0,0 +1,251 @@ +-- This script is a base script to include to add multiple functionality to your script + +-- To use this script +-- Include it in your script into the rollout at the begining. +-- Implement a do_it function to do the job in your rollout. +-- The function should retun -1 if an arror occured, else the count of modification done +-- It the function returns <1, the project will not be overwritten + +Group "Running properties" +( + RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left + + Label DirectoryLabel "Source directory" align:#left + EditText Directory "" width:500 align:#left enabled:false + Button BrowseDirectory "Browse..." align:#left enabled:false + + CheckBox Recurse "Look in subfolders" checked:false enabled:false + CheckBox Test "Test only, do not save" checked:true enabled:false + CheckBox BackupFiles "Backup files" checked:true enabled:false + CheckBox StopOnError "Stop on error" checked:true enabled:false + + Label ProgressText width:500 align:#left + ProgressBar Progress width:500 align:#left + + Button GoButton "Go" width:500 align:#left +) + local countModifications + local countErrors + local fileModified + local fileParsed + + fn UpdateData = + ( + if SourceFiles.state == 2 then + isSourceDir = true + else + isSourceDir = false + if Test.checked == true then + isTest = true + else + isTest = false + + Directory.enabled = isSourceDir + BrowseDirectory.enabled = isSourceDir + Recurse.enabled = isSourceDir + Test.enabled = isSourceDir + BackupFiles.enabled = isSourceDir and (isTest == false) + StopOnError.enabled = isSourceDir + ) + + on SourceFiles changed state do + ( + UpdateData () + ) + + on Test changed state do + ( + UpdateData () + ) + + fn call_do_it = + ( + local result + + -- One more project + fileParsed = fileParsed + 1 + + -- Call it + result = do_it () + + -- Error ? + if result < 0 then + countErrors = countErrors + 1 + else + countModifications = countModifications + result + + -- Return result + return result + ) + + fn BackupFile file = + ( + local i + local newFilename + + i = 0 + while true do + ( + -- New file name + newFilename = file + ".backup_" + (i as string) + + -- File exist ? + if (fileExist newFilename) == false then + ( + if (copyFile file newFilename) == false then + return false + else + return true + ) + i = i + 1 + ) + ) + + fn RecurseFolder currentDirectory = + ( + local result + local file + local files + + -- Parse files + files = getFiles (currentDirectory+"/*.max") + + -- For each files + for i = 1 to files.count do + ( + -- File name + file = files[i] + + -- Progress bar + ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\"" + Progress.value = i*100/files.count + + resetMAXFile #noprompt + + -- Open the max project + if mergeMaxFile file quiet:true == true then + ( + result = call_do_it () + + -- Error ? + if result < 0 then + ( + if StopOnError.checked == true then + Messagebox ("Error in file " + file) + ) + else + ( + -- Save the max project ? + if (Test.checked == false) and (result != 0) then + ( + -- Backup the max project ? + local ok + ok = true + if BackupFiles.checked == true then + ( + -- Backup the file + if (BackupFile file) == false then + ( + -- Don't save the file because backup has failed + ok = false + + if StopOnError.checked == true then + Messagebox ("Can't backup file " + file) + + -- One more error + countErrors = countErrors + 1 + ) + ) + + -- Save the max project ? + if ok == true then + ( + if (saveMaxFile file) == true then + ( + fileModified = fileModified + 1 + ) + else + ( + if StopOnError.checked == true then + Messagebox ("Can't write file " + file) + + -- One more error + countErrors = countErrors + 1 + ) + ) + ) + ) + ) + else + ( + if StopOnError.checked == true then + Messagebox ("Can't load file " + file) + + -- One more error + countErrors = countErrors + 1 + ) + ) + + -- Parse sub directory ? + if (Recurse.checked == true) then + ( + local directories + + -- Get the directories + directories = getDirectories (currentDirectory+"/*") + + -- For each directories + for dir in directories do + ( + RecurseFolder dir + ) + ) + ) + + on BrowseDirectory pressed do + ( + local dir + try + ( + dir = getSavePath () -- caption:"Select the projects directory" + if dir != undefined then + Directory.text = dir + ) + catch + ( + ) + ) + + on GoButton pressed do + ( + -- Reset count + countModifications = 0 + countErrors = 0 + fileModified = 0 + fileParsed = 0 + + -- Get files in the shape_source_directory + if SourceFiles.state == 2 then + ( + -- Should warning user ? + if (SourceFiles.state == 2) and (Test.checked == false) then + ( + -- Warning ! + if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then + RecurseFolder (adjustPathStringForScript Directory.text) + ) + else + ( + RecurseFolder (adjustPathStringForScript Directory.text) + ) + ) + else + ( + -- Just compute the current project + call_do_it () + ) + + -- Show errors + ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)." + Progress.value = 100 + )