function applyMultipleCardEffects() { var sheetActions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Действия"); var sheetBusinesses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Бизнесы"); var sheetResources = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Ресурсы"); if (!sheetActions || !sheetBusinesses || !sheetResources) { throw new Error("Ошибка: Не найдены одна или несколько вкладок: 'Действия', 'Бизнесы', 'Ресурсы'!"); } var actionsData = sheetActions.getDataRange().getValues(); for (var i = 1; i < actionsData.length; i++) { var row = actionsData[i]; var actionCard = row[0] ? row[0].trim() : ""; // Карта действия var businessName = row[1] ? row[1].trim() : ""; // Название бизнеса var actingTeam = row[2] ? row[2].trim() : ""; // Команда-исполнитель var targetTeam = row[3] ? row[3].trim() : ""; // Целевая команда (если нужно) if (!actionCard) { sheetActions.getRange(i + 1, 5).setValue("Ошибка: Карта действия не указана!"); continue; } var result = executeAction(actionCard, businessName, actingTeam, targetTeam, sheetBusinesses, sheetResources); sheetActions.getRange(i + 1, 5).setValue(result); // Записываем результат } } function executeAction(actionCard, businessName, actingTeam, targetTeam, sheetBusinesses, sheetResources) { switch (actionCard) { case "Покупка земли": return adjustBusinessValue(businessName, actingTeam, -20, "cost", "Снижена стоимость объекта на 20%", sheetBusinesses); case "Банды на территории": return adjustTeamMoney(targetTeam, -400000, "Финансовые потери 400,000$", sheetResources); case "Компромат": return adjustTeamMoney(targetTeam, -700000, "Финансовые потери 700,000$", sheetResources); case "Потоп": case "Поджог": return destroyBusiness(businessName, targetTeam, `${actionCard} уничтожил бизнес и доход с него.`, sheetBusinesses); case "Свой человек": return "Действие отменено!"; case "Жалоба": return temporarilyDisableBusiness(businessName, targetTeam, 1, "Бизнес закрыт на 1 раунд.", sheetBusinesses); case "Пьяный оператор": return adjustBusinessValue(businessName, targetTeam, -20, "income", "Доход уменьшен на 20% на 1 раунд.", sheetBusinesses); case "Сломаны очистные сооружения": return adjustBusinessValue(businessName, targetTeam, -20, "cost", "Стоимость бизнеса снижена на 20%", sheetBusinesses); case "Чумные крысы": return adjustBusinessValue(businessName, targetTeam, -30, "cost", "Стоимость бизнеса снижена на 30%", sheetBusinesses); case "Отжать бизнес": return transferBusinessOwnership(businessName, targetTeam, actingTeam, "Бизнес отжат кланом.", sheetBusinesses); case "Грабеж": return robMoney(actingTeam, targetTeam, 1500000, "Грабеж: 1,500,000$ перераспределено", sheetResources); case "Кража": return stealMoney(actingTeam, targetTeam, 30, "Украдено 30% денег.", sheetResources); case "Черная пятница": return adjustTeamIncome(actingTeam, 50, "Доход увеличен на 50%.", sheetResources); default: return `Ошибка: Карта действия '${actionCard}' не распознана!`; } } function adjustBusinessValue(businessName, team, valueChange, property, message, sheetBusinesses) { var businessFinder = sheetBusinesses.createTextFinder(businessName).findNext(); if (!businessFinder) { return `Ошибка: Бизнес '${businessName}' не найден!`; } var businessRow = businessFinder.getRow(); var currentValue = sheetBusinesses.getRange(businessRow, property === "cost" ? 2 : 4).getValue(); var newValue = property === "cost" ? currentValue * (1 + valueChange / 100) : currentValue + valueChange; sheetBusinesses.getRange(businessRow, property === "cost" ? 2 : 4).setValue(newValue); return `${message} Новая ${property === "cost" ? "стоимость" : "доход"}: ${newValue}`; } function adjustTeamMoney(team, amount, message, sheetResources) { var teamFinder = sheetResources.createTextFinder(team).findNext(); if (!teamFinder) { return `Ошибка: Команда '${team}' не найдена!`; } var teamRow = teamFinder.getRow(); var currentMoney = sheetResources.getRange(teamRow, 2).getValue(); // Преобразуем текущее значение денег в число, если это текст currentMoney = parseFloat(currentMoney) || 0; // Рассчитываем новое значение var newMoney = currentMoney + amount; // Обновляем значение в таблице sheetResources.getRange(teamRow, 2).setValue(newMoney); return `${message} Текущий баланс: ${newMoney}`; } function robMoney(actingTeam, targetTeam, amount, message, sheetResources) { var targetFinder = sheetResources.createTextFinder(targetTeam).findNext(); if (!targetFinder) { return `Ошибка: Команда '${targetTeam}' не найдена!`; } var actingFinder = sheetResources.createTextFinder(actingTeam).findNext(); if (!actingFinder) { return `Ошибка: Команда '${actingTeam}' не найдена!`; } var targetRow = targetFinder.getRow(); var actingRow = actingFinder.getRow(); var targetMoney = sheetResources.getRange(targetRow, 2).getValue(); var actingMoney = sheetResources.getRange(actingRow, 2).getValue(); // Преобразуем текущее значение денег в число, если это текст targetMoney = parseFloat(targetMoney) || 0; actingMoney = parseFloat(actingMoney) || 0; if (targetMoney < amount) { amount = targetMoney; // Забираем только доступную сумму } // Обновляем значения sheetResources.getRange(targetRow, 2).setValue(targetMoney - amount); sheetResources.getRange(actingRow, 2).setValue(actingMoney + amount); return `${message} У ${targetTeam} отнято ${amount}$, у ${actingTeam} добавлено ${amount}$.`; } function destroyBusiness(businessName, team, message, sheetBusinesses) { var businessFinder = sheetBusinesses.createTextFinder(businessName).findNext(); if (!businessFinder) { return `Ошибка: Бизнес '${businessName}' не найден!`; } var businessRow = businessFinder.getRow(); sheetBusinesses.getRange(businessRow, 2).setValue(0); // Установить стоимость = 0 sheetBusinesses.getRange(businessRow, 4).setValue(0); // Установить доход = 0 return message; } function temporarilyDisableBusiness(businessName, team, rounds, message, sheetBusinesses) { // Это функция-заглушка: реализуйте механизм "временного отключения" в вашей системе return message; } function transferBusinessOwnership(businessName, oldOwner, newOwner, message, sheetBusinesses) { var businessFinder = sheetBusinesses.createTextFinder(businessName).findNext(); if (!businessFinder) { return `Ошибка: Бизнес '${businessName}' не найден!`; } var businessRow = businessFinder.getRow(); var currentOwner = sheetBusinesses.getRange(businessRow, 3).getValue(); if (currentOwner !== oldOwner) { return `Ошибка: Бизнес '${businessName}' не принадлежит клану '${oldOwner}'!`; } sheetBusinesses.getRange(businessRow, 3).setValue(newOwner); return message; } function stealMoney(actingTeam, targetTeam, percentage, message, sheetResources) { var targetFinder = sheetResources.createTextFinder(targetTeam).findNext(); if (!targetFinder) { return `Ошибка: Команда '${targetTeam}' не найдена!`; } var targetRow = targetFinder.getRow(); var targetMoney = sheetResources.getRange(targetRow, 2).getValue(); var stolenAmount = targetMoney * (percentage / 100); adjustTeamMoney(targetTeam, -stolenAmount, "", sheetResources); adjustTeamMoney(actingTeam, stolenAmount, "", sheetResources); return `${message} Украдено: ${stolenAmount}`; } function adjustTeamIncome(team, percentage, message, sheetResources) { var teamFinder = sheetResources.createTextFinder(team).findNext(); if (!teamFinder) { return `Ошибка: Команда '${team}' не найдена!`; } var teamRow = teamFinder.getRow(); var currentIncome = sheetResources.getRange(teamRow, 6).getValue(); var newIncome = currentIncome * (1 + percentage / 100); sheetResources.getRange(teamRow, 6).setValue(newIncome); return `${message} Новый доход: ${newIncome}`; }
function applyMultipleCardEffects() { var sheetActions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Действия"); var sheetBusinesses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Бизнесы"); var sheetResources = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Ресурсы"); if (!sheetActions || !sheetBusinesses || !sheetResources) { throw new Error("Ошибка: Не найдены одна или несколько вкладок: 'Действия', 'Бизнесы', 'Ресурсы'!"); } var actionsData = sheetActions.getDataRange().getValues(); for (var i = 1; i < actionsData.length; i++) { var row = actionsData[i]; var actionCard = row[0] ? row[0].trim() : ""; // Карта действия var businessName = row[1] ? row[1].trim() : ""; // Название бизнеса var actingTeam = row[2] ? row[2].trim() : ""; // Команда-исполнитель var targetTeam = row[3] ? row[3].trim() : ""; // Целевая команда (если нужно) if (!actionCard) { sheetActions.getRange(i + 1, 5).setValue("Ошибка: Карта действия не указана!"); continue; } var result = executeAction(actionCard, businessName, actingTeam, targetTeam, sheetBusinesses, sheetResources); sheetActions.getRange(i + 1, 5).setValue(result); // Записываем результат } } function executeAction(actionCard, businessName, actingTeam, targetTeam, sheetBusinesses, sheetResources) { switch (actionCard) { case "Покупка земли": return adjustBusinessValue(businessName, actingTeam, -20, "cost", "Снижена стоимость объекта на 20%", sheetBusinesses); case "Банды на территории": return adjustTeamMoney(targetTeam, -400000, "Финансовые потери 400,000$", sheetResources); case "Компромат": return adjustTeamMoney(targetTeam, -700000, "Финансовые потери 700,000$", sheetResources); case "Потоп": case "Поджог": return destroyBusiness(businessName, targetTeam, `${actionCard} уничтожил бизнес и доход с него.`, sheetBusinesses); case "Свой человек": return "Действие отменено!"; case "Жалоба": return temporarilyDisableBusiness(businessName, targetTeam, 1, "Бизнес закрыт на 1 раунд.", sheetBusinesses); case "Пьяный оператор": return adjustBusinessValue(businessName, targetTeam, -20, "income", "Доход уменьшен на 20% на 1 раунд.", sheetBusinesses); case "Сломаны очистные сооружения": return adjustBusinessValue(businessName, targetTeam, -20, "cost", "Стоимость бизнеса снижена на 20%", sheetBusinesses); case "Чумные крысы": return adjustBusinessValue(businessName, targetTeam, -30, "cost", "Стоимость бизнеса снижена на 30%", sheetBusinesses); case "Отжать бизнес": return transferBusinessOwnership(businessName, targetTeam, actingTeam, "Бизнес отжат кланом.", sheetBusinesses); case "Грабеж": return robMoney(actingTeam, targetTeam, 1500000, "Грабеж: 1,500,000$ перераспределено", sheetResources); case "Кража": return stealMoney(actingTeam, targetTeam, 30, "Украдено 30% денег.", sheetResources); case "Черная пятница": return applyBlackFriday(actingTeam, "Доход команды увеличен на 50%.", sheetBusinesses, sheetResources); default: return `Ошибка: Карта действия '${actionCard}' не распознана!`; } } function adjustBusinessValue(businessName, team, valueChange, property, message, sheetBusinesses) { var businessFinder = sheetBusinesses.createTextFinder(businessName).findNext(); if (!businessFinder) { return `Ошибка: Бизнес '${businessName}' не найден!`; } var businessRow = businessFinder.getRow(); var currentValue = sheetBusinesses.getRange(businessRow, property === "cost" ? 2 : 4).getValue(); var newValue = property === "cost" ? currentValue * (1 + valueChange / 100) : currentValue + valueChange; sheetBusinesses.getRange(businessRow, property === "cost" ? 2 : 4).setValue(newValue); return `${message} Новая ${property === "cost" ? "стоимость" : "доход"}: ${newValue}`; } function adjustTeamMoney(team, amount, message, sheetResources) { var teamFinder = sheetResources.createTextFinder(team).findNext(); if (!teamFinder) { return `Ошибка: Команда '${team}' не найдена!`; } var teamRow = teamFinder.getRow(); var currentMoney = sheetResources.getRange(teamRow, 2).getValue(); // Преобразуем текущее значение денег в число, если это текст currentMoney = parseFloat(currentMoney) || 0; // Рассчитываем новое значение var newMoney = currentMoney + amount; // Обновляем значение в таблице sheetResources.getRange(teamRow, 2).setValue(newMoney); return `${message} Текущий баланс: ${newMoney}`; } function applyBlackFriday(actingTeam, message, sheetBusinesses, sheetResources) { var businessData = sheetBusinesses.getDataRange().getValues(); var teamFinder = sheetResources.createTextFinder(actingTeam).findNext(); if (!teamFinder) { return `Ошибка: Команда '${actingTeam}' не найдена!`; } var teamRow = teamFinder.getRow(); var teamBusinesses = sheetResources.getRange(teamRow, 7).getValue(); // Текущие бизнесы команды if (!teamBusinesses) { return `Ошибка: У команды '${actingTeam}' нет текущих бизнесов!`; } var businessList = teamBusinesses.split(",").map(b => b.trim()); var incomeIncrease = 0; businessList.forEach(businessName => { for (var i = 1; i < businessData.length; i++) { if (businessData[i][0].trim() === businessName && businessData[i][2].trim() === actingTeam) { var currentIncome = parseFloat(businessData[i][3]) || 0; var newIncome = currentIncome * 1.5; sheetBusinesses.getRange(i + 1, 4).setValue(newIncome); incomeIncrease += newIncome - currentIncome; } } }); return `${message} Доход увеличен на ${incomeIncrease} для всех бизнесов команды '${actingTeam}'.`; } function destroyBusiness(businessName, team, message, sheetBusinesses) { var businessFinder = sheetBusinesses.createTextFinder(businessName).findNext(); if (!businessFinder) { return `Ошибка: Бизнес '${businessName}' не найден!`; } var businessRow = businessFinder.getRow(); sheetBusinesses.getRange(businessRow, 2).setValue(0); // Установить стоимость = 0 sheetBusinesses.getRange(businessRow, 4).setValue(0); // Установить доход = 0 return message; } function temporarilyDisableBusiness(businessName, team, rounds, message, sheetBusinesses) { // Это функция-заглушка: реализуйте механизм "временного отключения" в вашей системе return message; } function transferBusinessOwnership(businessName, oldOwner, newOwner, message, sheetBusinesses) { var businessFinder = sheetBusinesses.createTextFinder(businessName).findNext(); if (!businessFinder) { return `Ошибка: Бизнес '${businessName}' не найден!`; } var businessRow = businessFinder.getRow(); var currentOwner = sheetBusinesses.getRange(businessRow, 3).getValue(); if (currentOwner !== oldOwner) { return `Ошибка: Бизнес '${businessName}' не принадлежит клану '${oldOwner}'!`; } sheetBusinesses.getRange(businessRow, 3).setValue(newOwner); return message; } function stealMoney(actingTeam, targetTeam, percentage, message, sheetResources) { var targetFinder = sheetResources.createTextFinder(targetTeam).findNext(); if (!targetFinder) { return `Ошибка: Команда '${targetTeam}' не найдена!`; } var targetRow = targetFinder.getRow(); var targetMoney = sheetResources.getRange(targetRow, 2).getValue(); var stolenAmount = targetMoney * (percentage / 100); adjustTeamMoney(targetTeam, -stolenAmount, "", sheetResources); adjustTeamMoney(actingTeam, stolenAmount, "", sheetResources); return `${message} Украдено: ${stolenAmount}`; } function adjustTeamIncome(team, percentage, message, sheetResources) { var teamFinder = sheetResources.createTextFinder(team).findNext(); if (!teamFinder) { return `Ошибка: Команда '${team}' не найдена!`; } var teamRow = teamFinder.getRow(); var currentIncome = sheetResources.getRange(teamRow, 6).getValue(); var newIncome = currentIncome * (1 + percentage / 100); sheetResources.getRange(teamRow, 6).setValue(newIncome); return `${message} Новый доход: ${newIncome}`; }
Личный кабинет партнера Левиафан
Свяжитесь с Вашим менеджером по любым вопросам.
Оксана Бухаринова
Ваш личный менеджер
Телефон: +7(905)291-09-59
Email: manager@leviafun.ru
Our Contacts
Feel free to write and call us. We really love to communicate with our clients.
+7(995)890-75-50
toleviafun@yandex.ru
Санкт-Петербург, ул. Лифляндская, д.3