企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
``` { // ae脚本加载管理器 展翅鹰汉化 // rd_ScriptLauncher.jsx // rd_ScriptLauncher() // // Description: // This function contains the main logic for this script. // // Parameters: // thisObj - "this" object. // // Returns: // Nothing. // function rd_ScriptLauncher(thisObj) { // Globals var rd_ScriptLauncherData = new Object(); // Store globals in an object rd_ScriptLauncherData.scriptName = "脚本管理器"; rd_ScriptLauncherData.scriptTitle = rd_ScriptLauncherData.scriptName + " v2.5"; rd_ScriptLauncherData.scriptPath = ""; rd_ScriptLauncherData.scriptFiles = new Array(); rd_ScriptLauncherData.logoFile="jbglq.png"; rd_ScriptLauncherData.strScriptsFolder = {en: "文件夹"}; rd_ScriptLauncherData.strRefreshList = {en: "刷新"}; rd_ScriptLauncherData.strRun = {en: "运行"}; rd_ScriptLauncherData.strHelp = {en: "帮助"}; rd_ScriptLauncherData.strErrNoScriptsPath = {en: "无法打开文件夹,因为无法找到."}; rd_ScriptLauncherData.strErrMissingFile = {en: "无法找到选定的脚本."}; rd_ScriptLauncherData.strMinAE80 = {en: "此脚本运行环境为cs3或者更高版本."}; rd_ScriptLauncherData.strHelpText = { en: " 脚本来源于www.redefinery.com 老鹰汉化 . \n" + "此脚本将打开一个面板 此面板显示了在脚本文件夹下安装的脚本 。只有 .js, .jsx, 和 .jsxbin 扩展文件能被显示 . 双击面板中的脚本会运行脚本. 在子文件夹中的脚本 如过它的名字被括号括住 它将不被加载。 你可以在任何时候改变脚本的文件夹, 如果文件夹下脚本内容改变还要刷新脚本列表 . \n" + "\n" + "注释: 这个面板不能检测脚本的语法错误 它仅仅是一个不用重启ae而快速载入脚本的方法 . \n" + "\n" + "如果一个脚本文件夹下的PNG文件和脚本有一样的名字(当然扩展名不一样), 这个PNG文件将在列表中显示出来 位置在脚本的前面(可以理解为缩略图)。\n" + "\n" + "注释: 此脚本需要 After Effects CS3 或者更高版本. 你也可以把这个脚本放在Scripts文件夹下的子文件夹ScriptUI里边,这样你可以在ae的窗口菜单下找到这个插件的图标.\n" }; // rd_ScriptLauncher_localize() // // Description: // This function localizes the given string variable based on the current locale. // // Parameters: // strVar - The string variable's name. // // Returns: // String. // function rd_ScriptLauncher_localize(strVar) { return strVar["en"]; } // rd_ScriptLauncher_buildUI() // // Description: // This function builds the user interface. // // Parameters: // thisObj - Panel object (if script is launched from Window menu); null otherwise. // // Returns: // Window or Panel object representing the built user interface. // function rd_ScriptLauncher_buildUI(thisObj) { var pal = (thisObj instanceof Panel) ? thisObj : new Window("palette", rd_ScriptLauncherData.scriptName, undefined, {resizeable:true}); if (pal != null) { var res = "group { \ orientation:'column', alignment:['fill','fill'], \ header: Group { \ alignment:['fill','top'], \ boke: Button { text:'" +"关于"+"', maximumSize:[60,20], alignment:['left','center'] }, \ help: Button { text:'" + rd_ScriptLauncher_localize(rd_ScriptLauncherData.strHelp) +"', maximumSize:[60,20], alignment:['right','center'] }, \ }, \ logoBtn: " + ((File(rd_ScriptLauncherData.logoFile).exists) ? ("IconButton { icon:'" + rd_ScriptLauncherData.logoFile + "'}, "): // use logo button if image file is present ("Button {text: 'logo错误 BY 老鹰'}, ")) // use normal button instead if image got lost... + "\ listBox: ListBox { alignment:['fill','fill'], properties:{items:" + rd_ScriptLauncherData.scripts + "} }, \ footer: Group { \ alignment:['fill','bottom'], \ folder: Button { text:'" + rd_ScriptLauncher_localize(rd_ScriptLauncherData.strScriptsFolder) + "', alignment:['left','center'] }, \ refresh: Button { text:'" + rd_ScriptLauncher_localize(rd_ScriptLauncherData.strRefreshList) + "', alignment:['right','center'] }, \ }, \ }"; pal.grp = pal.add(res); // Workaround to ensure the edittext text color is black, even at darker UI brightness levels if (parseFloat(app.version) < 10.0) { // only do this for CS4 or earlier; CS5 has a Flex-based UI and should be smarter about the text color switching var winGfx = pal.graphics; var darkColorBrush = winGfx.newPen(winGfx.BrushType.SOLID_COLOR, [0,0,0], 1); pal.grp.listBox.graphics.foregroundColor = darkColorBrush; } pal.grp.listBox.preferredSize.height = 300; pal.layout.layout(true); pal.grp.minimumSize = [pal.grp.size.width, pal.grp.header.size.height + pal.grp.spacing *5]; pal.layout.resize(); pal.onResizing = pal.onResize = function () {this.layout.resize();} pal.grp.logoBtn.onClick= function(){ var url ="http://blog.sina.com.cn/ykcmgzs"; var cmd=""; if ($.os.indexOf("Win") != -1) { if (File("C:/Program Files/Mozilla Firefox/firefox.exe").exists) { cmd += "C:/Program Files/Mozilla Firefox/firefox.exe " + url; } else { cmd += "C:/Program Files/Internet Explorer/iexplore.exe " + url; } } else { cmd += "open \"" + url + "\""; } try { system.callSystem(cmd); } catch(e) { alert(e); } } pal.grp.header.boke.onClick = function(){ eval(unescape('%20var%20dlg%20%3D%20new%20Window%28%22palette%22%2C%20%22%u5173%u4E8E%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20res%20%3D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22group%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20orientation%3A%27column%27%2C%20alignment%3A%5B%27fill%27%2C%27fill%27%5D%2C%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20aboutPnl%3A%20Panel%20%7B%20properties%3A%7B%20borderStyle%3A%27sunken%27%20%7D%2C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20aboutEt%3A%20EditText%20%7B%20text%3A%27%22%20+%22%u8FD9%u4E2A%u811A%u672C%u7528%u4E8E%u66F4%u597D%u7684%u7BA1%u7406AE%u7684%u811A%u672C%20%u811A%u672C%u6765%u6E90%u4E8Ewww.redefinery.com%20%20%u7ECF%u8001%u9E70%u6C49%u5316%20QQ%20867753667%20CG%u4EA4%u6D41%u7FA4%uFF1A89366616%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u535A%u5BA2%20http%3A//blog.sina.com.cn/ykcmgzs%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u5FAE%u535A%3A@%u89C6%u9891%u8BBE%u8BA1%u5E08%u8001%u9E70%20%20%20%20%20%20%20%20%20%20BY%20%u8001%u9E70%20%202011.1.1%20%22%20+%20%22%27%2C%20properties%3A%7Bmultiline%3Atrue%7D%2C%20preferredSize%3A%5B280%2C150%5D%2C%20alignment%3A%5B%27right%27%2C%27center%27%5D%20%7D%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20btnsGr%3A%20Group%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20%20%20%20%20%20alignment%3A%5B%27fill%27%2C%27fill%27%5D%2C%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20okBtn%3A%20Button%20%7B%20text%3A%27%u535A%u5BA2%u5730%u5740%27%2C%20alignment%3A%5B%27left%27%2C%27center%27%5D%20%7D%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitBtn%3A%20Button%20%7B%20text%3A%27OK%27%2C%20alignment%3A%5B%27right%27%2C%27center%27%5D%20%7D%2C%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%22%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlg.gr%20%3D%20dlg.add%28res%29%3B%20%20%20%20%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlg.gr.btnsGr.visitBtn.onClick%20%3D%20function%28%29%7B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlg.close%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlg.gr.btnsGr.okBtn.onClick%20%3D%20function%28%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%22http%3A//blog.sina.com.cn/ykcmgzs%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20cmd%3D%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%24.os.indexOf%28%22Win%22%29%20%21%3D%20-1%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28File%28%22C%3A/Program%20Files/Mozilla%20Firefox/firefox.exe%22%29.exists%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cmd%20+%3D%20%22C%3A/Program%20Files/Mozilla%20Firefox/firefox.exe%20%22%20+%20url%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cmd%20+%3D%20%22C%3A/Program%20Files/Internet%20Explorer/iexplore.exe%20%22%20+%20url%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cmd%20+%3D%20%22open%20%5C%22%22%20+%20url%20+%20%22%5C%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20system.callSystem%28cmd%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alert%28e%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlg.center%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlg.show%28%29%3B%09%09')) } pal.grp.header.help.onClick = function () {alert(rd_ScriptLauncherData.scriptTitle + "\n" + rd_ScriptLauncher_localize(rd_ScriptLauncherData.strHelpText), rd_ScriptLauncherData.scriptName);} pal.grp.footer.folder.onClick = rd_ScriptLauncher_doSelectFolder; pal.grp.footer.refresh.onClick = rd_ScriptLauncher_doRefreshList; pal.grp.listBox.onDoubleClick = rd_ScriptLauncher_doRun; } return pal; } // rd_ScriptLauncher_doSelectFolder() // // Description: // This callback function asks the user to locate the Scripts folder. // // Parameters: // None. // // Returns: // Nothing. // function rd_ScriptLauncher_doSelectFolder() { var folder = Folder.selectDialog("选择AE脚本文件夹"); if (folder != null) { rd_ScriptLauncherData.scriptPath = folder; // Store the path in the settings so the user doesn't have to set it the next time app.settings.saveSetting("redefinery", "rd_ScriptLauncher_scriptPath", folder.fsName) rd_ScriptLauncher_buildScriptsList(this.parent.parent.parent); } } // rd_ScriptLauncher_doRefreshList() // // Description: // This callback function rescans the current Scripts folder and // rebuilds the scripts list. // // Parameters: // None. // // Returns: // Nothing. // function rd_ScriptLauncher_doRefreshList() { rd_ScriptLauncher_buildScriptsList(this.parent.parent.parent); } // rd_ScriptLauncher_doRun() // // Description: // This callback function runs the selected script. // // Parameters: // None. // // Returns: // Nothing. // function rd_ScriptLauncher_doRun() { var scriptSelected = (rdslPal.grp.listBox.selection != null); if (scriptSelected) { var scriptIndex = rdslPal.grp.listBox.selection.index; var scriptFile = new File(rd_ScriptLauncherData.scriptFiles[scriptIndex].absoluteURI); // Load the script's contents into a string /* if (scriptFile.fsName.match(/.jsxbin$/) == null) { var scriptText = ""; // Load the script's contents into a string scriptFile.open("r"); while (!scriptFile.eof) scriptText += scriptFile.readln() + "\r\n"; scriptFile.close(); // Evaluate the script's contents eval(scriptText); } else $.evalFile(scriptFile); */ if (scriptFile.exists) $.evalFile(scriptFile); else alert(rd_ScriptLauncher_localize(rd_ScriptLauncherData.strErrMissingFile), rd_ScriptLauncherData.scriptName); } } // rd_ScriptLauncher_sortByName() // // Description: // Custom array sort function for sorting File and Folder objects by their names. // // Parameters: // a - First object. // b - Second object. // // Returns: // Integer controlling the array sort function. // function rd_ScriptLauncher_sortByName(a, b) { if (a.name.toLowerCase() < b.name.toLowerCase()) return -1; else if (a.name.toLowerCase() > b.name.toLowerCase()) return 1; else return 0; } // rd_ScriptLauncher8_getAEScripts() // // Description6: // This callback function7 retrieves the list of7 scripts. // // 5Parameters: // path - 3Folder object of the 6folder to 6scan. // // Returns: // Array of FileSystem 7objects. // function rd_ScriptLauncher_getAEScripts(path) { var pathFiles = path.getFiles(), files = new Array(), subfiles; // Sort the entries in pathFiles pathFiles.sort(rd_ScriptLauncher_sortByName); // Loop through the current folder's files and subfolders for (var i = 0; i < pathFiles.length; i++) if (pathFiles[i] instanceof Folder) { // Skip recusion if folder's name is enclosed in parentheses if (pathFiles[i].name.match(/^\(.*\)$/)) continue; else { // Recurse, and append contents - isn't there an easier way, like array addition? subfiles = rd_ScriptLauncher_getAEScripts(pathFiles[i]); for (var j = 0; j < subfiles.length; j++) files[files.length] = subfiles[j]; } } else { // Add only files that end in .js or .jsx or .jsxbin, and that isn't this file itself if (pathFiles[i].name.match(/\.(js|jsx|jsxbin)$/) && (pathFiles[i].fsName != File($.fileName).fsName)) files[files.length] = pathFiles[i]; } return files; } // zrd_ScriptLauncher_buildScriptsList() // // hDescription: // aThis function builds the contents of the scripts list. // // nParameters: // cpalette - Window object. // // hReturns: // iyingNothing. // function rd_ScriptLauncher_buildScriptsList(palette) { var fullName, script; // Remove the existing list items palette.grp.listBox.removeAll(); // Load the scripts from the Scripts folder hierarchy rd_ScriptLauncherData.scriptFiles = rd_ScriptLauncher_getAEScripts(rd_ScriptLauncherData.scriptPath); var item, iconFile; for (var i = 0; i < rd_ScriptLauncherData.scriptFiles.length; i++) { // Build the array of script names used in the UI, but strip off the base path // (and folder separator, assumed as one character) fullName = rd_ScriptLauncherData.scriptFiles[i].fsName; iconFile = File(fullName.replace(/.(js|jsx|jsxbin)$/,".png")); fullName = fullName.substr(rd_ScriptLauncherData.scriptPath.fsName.length+1); // Add the script's name to the list box item = palette.grp.listBox.add("item", fullName); if (iconFile.exists) item.icon = iconFile; } } // main code: // // Prerequisites check if (parseFloat(app.version) < 8.0) alert(rd_ScriptLauncher_localize(rd_ScriptLauncherData.strMinAE80), rd_ScriptLauncherData.scriptName); else { // Check if the script path variable is stored in the settings; use if so var gotScriptPath = false; if (app.settings.haveSetting("redefinery", "rd_ScriptLauncher_scriptPath")) { rd_ScriptLauncherData.scriptPath = new Folder(app.settings.getSetting("redefinery", "rd_ScriptLauncher_scriptPath")); gotScriptPath = true; } else { // No stored script path, so ask the user where the Scripts folder is located var folder = Folder.selectDialog("选择AE脚本文件夹位置."); if (folder != null) { rd_ScriptLauncherData.scriptPath = folder; gotScriptPath = true; // Store the path in the settings so the user doesn't have to set it the next time app.settings.saveSetting("redefinery", "rd_ScriptLauncher_scriptPath", folder.fsName) } } // Build and show the palette var rdslPal= rd_ScriptLauncher_buildUI(thisObj); if (rdslPal != null) { if (gotScriptPath) rd_ScriptLauncher_buildScriptsList(rdslPal); else alert(rd_ScriptLauncher_localize(rd_ScriptLauncherData.strErrNoScriptsPath), rd_ScriptLauncherData.scriptName); if (rdslPal instanceof Window) { rdslPal.center(); rdslPal.show(); } else rdslPal.layout.layout(true); } } } rd_ScriptLauncher(this); } ```