// Версія скрипта 2.3 (function(thisObj) { var AT = { scriptVersion: "2.3", strClear: "Очистити", strProcess: "Поїхали", strAdditionalOptions: "⚙", strWebLink: "f", strProjectLocation: "↑", strProjectLocationDesc: "Вказати місцезнаходження проекту для швидкого доступу до нього", }; var pal = (thisObj instanceof Panel) ? thisObj : new Window("palette", AT.scriptName, undefined, {resizeable: true}); pal.minimumSize = [10, 10]; var mainGroup = pal.add("group", undefined, "Main Group"); mainGroup.orientation = "column"; mainGroup.alignment = ["fill", "fill"]; mainGroup.alignChildren = ["fill", "top"]; mainGroup.spacing = 4; mainGroup.margins = [2, 2, 2, 2]; var header = mainGroup.add("statictext", undefined, AT.scriptName); header.alignment = "center"; header.graphics.font = ScriptUI.newFont("Arial", "Bold", 16); header.justify = "center"; var textInput = mainGroup.add("edittext", undefined, "", { multiline: true, wantReturn: true, scrolling: true }); textInput.alignment = ["fill", "fill"]; textInput.preferredSize.height = 300; var buttonGroup = mainGroup.add("group", undefined, "Button Group"); buttonGroup.orientation = "row"; buttonGroup.alignment = ["center", "bottom"]; buttonGroup.alignChildren = ["center", "center"]; buttonGroup.spacing = 2; var clearButton = buttonGroup.add("button", undefined, AT.strClear); clearButton.preferredSize = [70, 20]; var additionalOptionsButton = buttonGroup.add("button", undefined, AT.strAdditionalOptions); additionalOptionsButton.graphics.font = ScriptUI.newFont("Arial", "Bold", 15); additionalOptionsButton.preferredSize = [20, 20]; // Додаємо кнопку AE з розміром 20x20 var aeButton = buttonGroup.add("button", undefined, "AE"); aeButton.preferredSize = [20, 20]; aeButton.onClick = function() { var projectPath = loadProjectLocation(); if (projectPath) { var projectFile = new File(projectPath); if (projectFile.exists) { app.open(projectFile); } else { alert("Файл проекту не знайдено за вказаним шляхом."); } } else { alert("Шлях до проекту не вказано."); } }; var webLinkButton = buttonGroup.add("button", undefined, AT.strWebLink); webLinkButton.preferredSize = [20, 20]; webLinkButton.graphics.font = ScriptUI.newFont("Arial", "Regular", 15); var processButton = buttonGroup.add("button", undefined, AT.strProcess); processButton.preferredSize = [70, 20]; clearButton.onClick = function() { textInput.text = ""; }; var renderCheckboxValue = loadCheckboxState("renderCheckbox"); var espCheckboxValue = loadCheckboxState("espCheckbox"); additionalOptionsButton.onClick = function() { var dialog = new Window("dialog", "Налаштування", undefined, {closeButton: true}); dialog.orientation = "column"; dialog.alignChildren = ["fill", "fill"]; dialog.margins = 10; var renderCheckbox = dialog.add("checkbox", undefined, "Автоматично відправляти на рендер в AE"); renderCheckbox.value = renderCheckboxValue; var espCheckbox = dialog.add("checkbox", undefined, "Автоматично відправляти на рендер в AE для Іспанців"); espCheckbox.value = espCheckboxValue; var projectLocationGroup = dialog.add("group", undefined, "Project Location Group"); projectLocationGroup.orientation = "row"; projectLocationGroup.alignChildren = ["left", "center"]; projectLocationGroup.spacing = 10; var projectLocationButton = projectLocationGroup.add("button", undefined, AT.strProjectLocation); projectLocationButton.preferredSize = [25, 25]; projectLocationButton.onClick = function() { var projectFile = File.openDialog("Виберіть файл проекту", "*.aep"); if (projectFile) { saveProjectLocation(projectFile.fsName); alert("Шлях до проекту збережено: " + projectFile.fsName); } }; var projectLocationDesc = projectLocationGroup.add("statictext", undefined, AT.strProjectLocationDesc); projectLocationDesc.preferredSize = [300, 25]; var downloadGroup = dialog.add("group", undefined, "Download Group"); downloadGroup.orientation = "row"; downloadGroup.alignChildren = ["left", "center"]; downloadGroup.spacing = 10; var downloadButton = downloadGroup.add("button", undefined, "↓"); downloadButton.preferredSize = [25, 25]; var downloadText = downloadGroup.add("statictext", undefined, "Завантажити проект втрати РФ, скрипт працює тільки з цим проектом"); downloadButton.onClick = function() { var url = "https://drive.google.com/drive/folders/1zqWwhuTL9s0uNqIMG2rAimaAKNl4XMcA?usp=sharing"; var shellCommand = "cmd /c start " + url; system.callSystem(shellCommand); }; var okButton = dialog.add("button", undefined, "ОК", {name: "ok"}); okButton.onClick = function() { renderCheckboxValue = renderCheckbox.value; espCheckboxValue = espCheckbox.value; saveCheckboxState("renderCheckbox", renderCheckboxValue); saveCheckboxState("espCheckbox", espCheckboxValue); dialog.close(); }; dialog.center(); dialog.show(); }; processButton.onClick = function() { var textContent = textInput.text; if (textContent.trim() === "") { alert("Текстове поле порожнє. Будь ласка, введіть текст."); return; } var parsedNumbers = parseNumbers(textContent); var comp = findCompByName("SkriptNumberPoteri"); if (comp) { saveNumbersToTextLayers(parsedNumbers, comp); if (renderCheckboxValue) { var renderComp = findCompWithLayers("CONTROL", "CONTROL_za_den"); if (renderComp) { addToRenderQueue(renderComp); } else { alert("Не знайдено композицію зі слоями 'CONTROL' і 'CONTROL_za_den'."); return; } } if (espCheckboxValue) { var espComp = findCompByLayer("INFO_BG_ESP"); if (espComp) { addToRenderQueue(espComp); } else { alert("Не знайдено композицію з шаром 'INFO_BG_ESP'."); return; } } alert("Виконано успішно.\nСлава Україні!"); // Очищення текстового поля після виконання дій textInput.text = ""; } else { alert("Композиція 'SkriptNumberPoteri' не знайдена."); } }; webLinkButton.onClick = function() { var url = "https://www.facebook.com/GeneralStaff.ua/"; var shellCommand = "cmd /c start " + url; system.callSystem(shellCommand); }; pal.layout.layout(true); pal.layout.resize(); pal.onResizing = pal.onResize = function () { this.layout.resize(); textInput.preferredSize.height = pal.size[1] - 150; }; pal.onShow = function() { this.layout.resize(); this.layout.layout(true); }; function parseNumbers(content) { var result = []; var beforeParenthesisMatches = content.match(/(\d+)\s*\(/g); if (beforeParenthesisMatches) { for (var i = 0; i < beforeParenthesisMatches.length; i++) { var match = beforeParenthesisMatches[i].match(/(\d+)\s*\(/); if (match) { result.push(parseInt(match[1], 10)); } } } var afterPlusMatches = content.match(/\+\s*(\d+)/g); if (afterPlusMatches) { for (var j = 0; j < afterPlusMatches.length; j++) { var match = afterPlusMatches[j].match(/\+\s*(\d+)/); if (match) { result.push(parseInt(match[1], 10)); } } } return result; } function findCompByName(name) { for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (item instanceof CompItem && item.name === name) { return item; } } return null; } function findCompWithLayers(layerName1, layerName2) { for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (item instanceof CompItem) { if (item.layer(layerName1) && item.layer(layerName2)) { return item; } } } return null; } function findCompByLayer(layerName) { for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (item instanceof CompItem) { var layer = item.layer(layerName); if (layer) { return item; } } } return null; } function saveNumbersToTextLayers(numbers, comp) { app.beginUndoGroup("Save Numbers"); for (var i = 0; i < numbers.length && i < 28; i++) { var layerName = (i + 1).toString(); var layer = comp.layer(layerName); if (layer && layer instanceof TextLayer) { var textProp = layer.property("Source Text"); if (textProp) { var textDocument = textProp.value; textDocument.text = numbers[i].toString(); textProp.setValue(textDocument); } } } app.endUndoGroup(); } function addToRenderQueue(comp) { app.project.renderQueue.items.add(comp); } function saveCheckboxState(key, value) { var file = getSettingsFile(); var lines = []; if (file.exists) { file.open("r"); lines = file.read().split("\n"); file.close(); } var found = false; for (var i = 0; i < lines.length; i++) { if (lines[i].indexOf(key + "=") === 0) { lines[i] = key + "=" + value; found = true; break; } } if (!found) { lines.push(key + "=" + value); } try { file.open("w"); file.write(lines.join("\n")); file.close(); } catch (e) { // Не виводити повідомлення про помилку } } function loadCheckboxState(key) { var file = getSettingsFile(); if (file.exists) { file.open("r"); var lines = file.read().split("\n"); file.close(); for (var i = 0; i < lines.length; i++) { if (lines[i].indexOf(key + "=") === 0) { return lines[i].split("=")[1] === "true"; } } } return false; // Значення за замовчуванням } function saveProjectLocation(path) { var file = getSettingsFile(); try { file.open("a"); // Додати в кінець файлу file.writeln("projectLocation=" + path); file.close(); } catch (e) { // Не виводити повідомлення про помилку } } function loadProjectLocation() { var file = getSettingsFile(); if (file.exists) { file.open("r"); var lines = file.read().split("\n"); file.close(); for (var i = 0; i < lines.length; i++) { if (lines[i].indexOf("projectLocation=") === 0) { return lines[i].split("=")[1]; } } } return null; // Якщо не знайдено } function getSettingsFile() { var adobeFolder = new Folder("C:/ProgramData/Adobe"); if (!adobeFolder.exists) { adobeFolder.create(); } return new File(adobeFolder.fullName + "/PoteriRF_UATV_settings.txt"); } })(this);