173 lines
4.9 KiB
Plaintext
Executable File
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 |