Files
gtav-src/tools_ng/wildwest/script/3dsMax/Vehicles/Veh_cleanOrphanAssets.ms
T
2025-09-29 00:52:08 +02:00

173 lines
4.9 KiB
Plaintext
Executable File

filein (RsConfigGetWildWestDir() + "script/3dsMax/_config_files/Wildwest_header.ms")
try( DestroyDialog DeleteOrphanVehicleAssets_UI )catch()
rollout DeleteOrphanVehicleAssets_UI "Delete Orphan Vehicle Assets" width:300
(
local vehicleXML = getFiles (RsConfigGetAssetsDir() + "vehicles/*.xml")
local vehicleTCS_P4 = (RsConfigGetAssetsDir() + "metadata/textures/vehicles/")
local vehicleLiveryXML = getFilesRecursive (RsConfigGetArtDir() + "vehicles/") "*.xml"
local orphanTCS = #()
local changeListNum = undefined
local textureNames = #()
--
--CONTROLS
--
dotNetControl rsBannerPanel "Panel" pos:[0,0] height:32 width:DeleteOrphanVehicleAssets_UI.width
local banner = makeRsBanner dn_Panel:rsBannerPanel wiki:"PropTexture HDSplitter" filename:(getThisScriptFilename())
button btn_DoIt "Analyse" width:(DeleteOrphanVehicleAssets_UI.width - 20)
multilistbox lstOrphans height:20
button btn_Delete "Delete Selected" width:(DeleteOrphanVehicleAssets_UI.width - 20)
--checkbox chk_All "All" offset:[100, 0]
group "Process Info"
(
label lbl_info "Ready."
)
--/////////////////////////////////////////
-- FUNCTIONS
--/////////////////////////////////////////
fn XMLTextureScanner xmlList xpath fileattr =
(
for xmlPath in xmlList do
(
local xmlName = getFilenameFile xmlPath
xmlStream = xmlStreamHandler xmlFile:xmlPath
xmlStream.open()
xmlTextureNodes = xmlStream.root.SelectNodes xpath
for n=0 to (xmlTextureNodes.count - 1) do
(
local thisNode = xmlTextureNodes.item[n]
local fileName = thisNode.GetAttribute fileattr
appendIfUnique textureNames (getFilenameFile fileName)
)
xmlStream.close()
)
)
fn processVehicles =
(
--make sure we synced all the relevant files
lbl_info.text = "Sync Vehicle livery XML"
gRsPerforce.sync (RsConfigGetArtDir() + "vehicles/.../*.xml")
vehicleLiveryXML = getFilesRecursive (RsConfigGetArtDir() + "vehicles/") "*.xml"
lbl_info.text = "Sync Vehicle XML"
gRsPerforce.sync (RsConfigGetAssetsDir() + "vehicles/.../*.xml")
vehicleXML = getFiles (RsConfigGetAssetsDir() + "vehicles/*.xml")
lbl_info.text = "Sync Vehicle TCS"
gRsPerforce.sync (RsConfigGetAssetsDir() + "metadata/textures/vehicles/.../*.tcs")
XMLTextureScanner vehicleLiveryXML ".//texture" "file"
--break()
XMLTextureScanner vehicleXML ".//texture" "filename"
sort textureNames
print textureNames.count
local vehicleTCS = getFilesRecursive (RsConfigGetAssetsDir() + "metadata/textures/vehicles/") "*.tcs"
for tcs in vehicleTCS do
(
if (trimright (pathconfig.strippathtoleaf (getfilenamepath tcs)) "\\") == "shared" then continue
if findItem textureNames (getFilenameFile tcs) == 0 then
(
local uiName = (pathConfig.stripPathToLeaf (getFilenamePath tcs)) + (getFilenameFile tcs)
append orphanTCS (DataPair name:uiName path:tcs)
)
lbl_info.text = ("Processed: " + tcs)
)
lbl_info.text = "Ready."
--present the list
lstOrphans.items = for item in orphanTCS collect item.name
free textureNames
)
--add the orphan tcs to a changelist for deletion
--print orphanTCS
--get all the tcs for the vehicles and compare against the dict we just made
--local vehicleTCS = getFilesRecursive "x:/gta5/assets/metadata/textures/vehicles/" "*.tcs"
--/////////////////////////////////////////
--
--/////////////////////////////////////////
fn getMeAChangelist =
(
if changeListNum == undefined then
(
changeListNum = gRsPerforce.createChangeList ("Delete orphan Vehicle tcs" )
)
)
--/////////////////////////////////////////
-- EVENTS
--/////////////////////////////////////////
--/////////////////////////////////////////
--
--/////////////////////////////////////////
on btn_DoIt pressed do
(
processVehicles()
)
--/////////////////////////////////////////
--
--/////////////////////////////////////////
on btn_Delete pressed do
(
local selected = lstOrphans.selection as Array
if selected.count == 0 then return false
for i=1 to selected.count do
(
local tcsPathForDelete = undefined
for elem in orphanTCS while tcsPathForDelete == undefined do
(
if elem.name == lstOrphans.items[selected[i]] then tcsPathForDelete = elem.path
)
--print tcsPathForDelete
--set the path for delete
getMeAChangelist()
gRsPerforce.addDeleteFilesToChangelist changeListNum tcsPathForDelete
)
messageBox ("Deleted files in changelist: " + (changeListNum as String) + "\nHave a look")
)
--/////////////////////////////////////////
--
--/////////////////////////////////////////
on DeleteOrphanVehicleAssets_UI open do
(
banner.setup()
if gRsPerforce.connected() == false then gRsPerforce.connect()
)
)
createDialog DeleteOrphanVehicleAssets_UI