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}`;
}