@script modeler @version 2.2 @warnings @name "hos_incrementalSave" mySeperator = getsep(); main { incrementalSave(Mesh(0)); } incrementalSave:myObject { myFile = myObject.filename; if(myFile) // start creating an incrementalSave { myFileinfo = split(myFile); checkDir(myFileinfo[1] + myFileinfo[2], myFileinfo[3]+myFileinfo[4]); incVersion = checkIncrements(myFileinfo[1] + myFileinfo[2] + "incrementalSave" + mySeperator + myFileinfo[3] + myFileinfo[4], myFileinfo[3], myFileinfo[4]); incFile = myFileinfo[1] + myFileinfo[2] + "incrementalSave" + mySeperator + myFileinfo[3] + myFileinfo[4] + mySeperator + myFileinfo[3] + "." + strright("000" + incVersion.asStr(), 4) + myFileinfo[4]; filerename(myFile, incFile); // Using filerename() as move function; save(myFile); } else // The object has never been save before, don't screw this up or people might go Jay and Silent Bob on my ass. { myDir=getdir(OBJECTSDIR) + mySeperator; myFile = getfile("Save Object As", "*.lwo", myDir, 0); if(myFile) { myFileinfo = split(myFile); myFile = myFileinfo[1] + myFileinfo[2] + myFileinfo[3] + ".lwo"; // Basically makes sure there's ALWAYS an extension called .lwo save(myFile); } } } checkDir:myDir, myFile { dirArray = matchdirs(myDir,"incrementalSave"); if(!dirArray) { mkdir(myDir+"incrementalSave"); } dirArray = matchdirs(myDir+"incrementalSave"+mySeperator, myFile); if(!dirArray) { mkdir(myDir+"incrementalSave"+mySeperator+myFile); } } checkIncrements:myDir, myFile, myExt { incCount = 0; incArray = matchfiles(myDir, myFile + "*" + myExt); if(incArray != nil) { foreach(incFile, incArray) { // wanted to do this part with a more reliable regular expression, but LScript regex is bollocks. // So now we just do some string size math and pray that nothing weird is done with the filenames. incVersioning = strleft(incFile, size(incFile) - size(myExt)); incVersioning = strright(incVersioning, 4); incCount = max(incCount, incVersioning.asNum()); } } else { return 1; } return ++incCount; }