2052 lines
166 KiB
C#
2052 lines
166 KiB
C#
using System;
|
||
using System.Drawing;
|
||
using System.Windows.Forms;
|
||
using MetroFramework;
|
||
using MetroFramework.Forms;
|
||
using MetroFramework.Controls;
|
||
using System.Collections.Generic;
|
||
|
||
namespace uolter
|
||
{
|
||
public partial class Form1 : MetroForm
|
||
{
|
||
// --- Состояние Игры ---
|
||
private int currentStage = 0;
|
||
private int money = 7000;
|
||
private int suspicion = 0;
|
||
private const int MAX_SUSPICION = 100;
|
||
private bool hasJesse = false;
|
||
private bool hasRV = false;
|
||
private bool hasIngredients = false;
|
||
private bool firstBatchCooked = false;
|
||
private bool firstBatchSold = false;
|
||
// Добавьте эти строки после существующих переменных состояния
|
||
private bool knowsSaul = false;
|
||
private bool knowsGus = false; // Знакомство установлено
|
||
private bool worksForGus = false; // Активно работает на Гаса
|
||
private bool knowsMike = false;
|
||
private bool superLabBuilt = false; // Построена ли суперлаборатория
|
||
private int batchQuality = 96; // Начальное качество партии (%) - Уолт сразу делал хорошо
|
||
private bool hankIsSuspicious = false; // Начал ли Хэнк что-то подозревать лично о Уолте
|
||
private bool killedTuco = false; // Флаг, указывающий на исход событий с Туко (нужно для дальнейшего сюжета)
|
||
private bool knowsGale = false; // Знаком ли с Гейлом
|
||
private bool skylerKnows = false; // Знает ли Скайлер (частично или полностью)
|
||
private int saulRelationship = 0; // Отношения с Солом (может влиять на его услуги)
|
||
private int gusRelationship = 0; // Отношения с Гасом
|
||
// Добавьте эти строки после существующих переменных состояния
|
||
private bool gusIsDead = false; // Гас мертв?
|
||
private bool mikeIsPartner = false; // Майк стал партнером в новом деле?
|
||
private bool jesseIsOut = false; // Джесси вышел из игры (по своей воле)?
|
||
private bool workingWithLydia = false; // Установлен контакт/работа с Лидией?
|
||
private bool usingVamonosPest = false; // Используется ли прикрытие Vamonos Pest?
|
||
private bool hankKnows = false; // Знает ли Хэнк правду?
|
||
private bool waltIsDisappeared = false; // Уолт воспользовался услугой исчезновения?
|
||
private int trainHeistSuccess = 0; // 0 = не было, 1 = успех, -1 = провал/свидетель
|
||
private bool dealingWithJacksCrew = false; // Связан ли с бандой Джека
|
||
private bool familyLost = false; // Потерял ли семью (Скайлер ушла и т.д.)
|
||
// Добавьте эти строки после существующих и новых переменных
|
||
private int jesseMentalState = 0; // 0 = норма, <0 = подавлен/травмирован, >0 = мотивирован/злой
|
||
private int skylerInvolvement = 0; // 0 = не знает, 1 = подозревает, 2 = знает частично, 3 = участвует (мойка), 4 = враждебна
|
||
private int hankInvestigationProgress = 0; // Шкала, насколько близок Хэнк (0-10)
|
||
private bool ricinUsedSuccessfully = false; // Использован ли рицин успешно (на ком-то)
|
||
private bool greyMatterThreatened = false; // Использована ли угроза Гретхен/Эллиотту
|
||
private bool andreaKnows = false; // Знает ли Андреа о Джесси (опасность для нее)
|
||
private bool carWashOwned = false; // Куплена ли автомойка
|
||
private DevConsoleForm devConsole;
|
||
|
||
// Константы для лучшей читаемости кода
|
||
private const int STAGE_GAME_OVER_CAUGHT = 200; // Обновлено с 100
|
||
private const int STAGE_GAME_OVER_CAUGHT_COOKING = 201; // Обновлено с 101
|
||
private const int STAGE_END_CAUTIOUS = 202; // Обновлено с 102
|
||
private const int STAGE_END_EMPIRE = 203; // Обновлено с 103
|
||
private const int STAGE_END_FEAR = 204; // Обновлено с 104
|
||
|
||
|
||
public Form1()
|
||
{
|
||
InitializeComponent();
|
||
this.KeyPreview = true;
|
||
this.KeyDown += Form1_KeyDown;
|
||
this.StyleManager = metroStyleManager1;
|
||
}
|
||
|
||
private void Form1_Load(object sender, EventArgs e)
|
||
{
|
||
devConsole = new DevConsoleForm(this);
|
||
// Инициализация игры
|
||
ResetGameState();
|
||
UpdateUI();
|
||
GoToStage(0);
|
||
}
|
||
|
||
// --- Управление Игрой ---
|
||
|
||
private void Form1_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
// Открытие консоли разработчика по клавише F12 или F1
|
||
if (e.KeyCode == Keys.F12 || e.KeyCode == Keys.F1)
|
||
{
|
||
ShowDevConsole();
|
||
}
|
||
}
|
||
|
||
private void ShowDevConsole()
|
||
{
|
||
// Обновляем данные в консоли разработчика
|
||
devConsole.UpdateValues();
|
||
devConsole.Show();
|
||
devConsole.BringToFront();
|
||
}
|
||
|
||
// Методы для доступа к переменным состояния из DevConsole
|
||
public void SetMoney(int value)
|
||
{
|
||
money = value;
|
||
UpdateUI();
|
||
}
|
||
|
||
public void SetSuspicion(int value)
|
||
{
|
||
suspicion = Math.Max(0, Math.Min(MAX_SUSPICION, value));
|
||
UpdateUI();
|
||
}
|
||
|
||
public Dictionary<string, object> GetAllGameVariables()
|
||
{
|
||
var variables = new Dictionary<string, object>
|
||
{
|
||
{ "currentStage", currentStage },
|
||
{ "money", money },
|
||
{ "suspicion", suspicion },
|
||
{ "hasJesse", hasJesse },
|
||
{ "hasRV", hasRV },
|
||
{ "hasIngredients", hasIngredients },
|
||
{ "firstBatchCooked", firstBatchCooked },
|
||
{ "firstBatchSold", firstBatchSold },
|
||
{ "knowsSaul", knowsSaul },
|
||
{ "knowsGus", knowsGus },
|
||
{ "worksForGus", worksForGus },
|
||
{ "knowsMike", knowsMike },
|
||
{ "superLabBuilt", superLabBuilt },
|
||
{ "batchQuality", batchQuality },
|
||
{ "hankIsSuspicious", hankIsSuspicious },
|
||
{ "killedTuco", killedTuco },
|
||
{ "knowsGale", knowsGale },
|
||
{ "skylerKnows", skylerKnows },
|
||
{ "saulRelationship", saulRelationship },
|
||
{ "gusRelationship", gusRelationship },
|
||
{ "gusIsDead", gusIsDead },
|
||
{ "mikeIsPartner", mikeIsPartner },
|
||
{ "jesseIsOut", jesseIsOut },
|
||
{ "workingWithLydia", workingWithLydia },
|
||
{ "usingVamonosPest", usingVamonosPest },
|
||
{ "hankKnows", hankKnows },
|
||
{ "waltIsDisappeared", waltIsDisappeared },
|
||
{ "trainHeistSuccess", trainHeistSuccess },
|
||
{ "dealingWithJacksCrew", dealingWithJacksCrew },
|
||
{ "familyLost", familyLost },
|
||
{ "jesseMentalState", jesseMentalState },
|
||
{ "skylerInvolvement", skylerInvolvement },
|
||
{ "hankInvestigationProgress", hankInvestigationProgress },
|
||
{ "ricinUsedSuccessfully", ricinUsedSuccessfully },
|
||
{ "greyMatterThreatened", greyMatterThreatened },
|
||
{ "andreaKnows", andreaKnows },
|
||
{ "carWashOwned", carWashOwned }
|
||
};
|
||
|
||
return variables;
|
||
}
|
||
|
||
public bool SetGameVariable(string variableName, object value)
|
||
{
|
||
try
|
||
{
|
||
switch (variableName)
|
||
{
|
||
case "currentStage":
|
||
if (value is int stage)
|
||
{
|
||
GoToStage(stage);
|
||
return true;
|
||
}
|
||
break;
|
||
case "money":
|
||
if (value is int m)
|
||
{
|
||
money = m;
|
||
UpdateUI();
|
||
return true;
|
||
}
|
||
break;
|
||
case "suspicion":
|
||
if (value is int s)
|
||
{
|
||
suspicion = Math.Max(0, Math.Min(MAX_SUSPICION, s));
|
||
UpdateUI();
|
||
return true;
|
||
}
|
||
break;
|
||
case "hasJesse":
|
||
if (value is bool hj) { hasJesse = hj; return true; }
|
||
break;
|
||
case "hasRV":
|
||
if (value is bool hRV) { hasRV = hRV; return true; }
|
||
break;
|
||
case "hasIngredients":
|
||
if (value is bool hI) { hasIngredients = hI; return true; }
|
||
break;
|
||
case "firstBatchCooked":
|
||
if (value is bool fbc) { firstBatchCooked = fbc; return true; }
|
||
break;
|
||
case "firstBatchSold":
|
||
if (value is bool fbs) { firstBatchSold = fbs; return true; }
|
||
break;
|
||
case "knowsSaul":
|
||
if (value is bool ks) { knowsSaul = ks; return true; }
|
||
break;
|
||
case "knowsGus":
|
||
if (value is bool kg) { knowsGus = kg; return true; }
|
||
break;
|
||
case "worksForGus":
|
||
if (value is bool wfg) { worksForGus = wfg; return true; }
|
||
break;
|
||
case "knowsMike":
|
||
if (value is bool km) { knowsMike = km; return true; }
|
||
break;
|
||
case "superLabBuilt":
|
||
if (value is bool slb) { superLabBuilt = slb; return true; }
|
||
break;
|
||
case "batchQuality":
|
||
if (value is int bq) { batchQuality = bq; return true; }
|
||
break;
|
||
case "hankIsSuspicious":
|
||
if (value is bool his) { hankIsSuspicious = his; return true; }
|
||
break;
|
||
case "killedTuco":
|
||
if (value is bool kt) { killedTuco = kt; return true; }
|
||
break;
|
||
case "knowsGale":
|
||
if (value is bool kgl) { knowsGale = kgl; return true; }
|
||
break;
|
||
case "skylerKnows":
|
||
if (value is bool sk) { skylerKnows = sk; return true; }
|
||
break;
|
||
case "saulRelationship":
|
||
if (value is int sr) { saulRelationship = sr; return true; }
|
||
break;
|
||
case "gusRelationship":
|
||
if (value is int gr) { gusRelationship = gr; return true; }
|
||
break;
|
||
case "gusIsDead":
|
||
if (value is bool gid) { gusIsDead = gid; return true; }
|
||
break;
|
||
case "mikeIsPartner":
|
||
if (value is bool mip) { mikeIsPartner = mip; return true; }
|
||
break;
|
||
case "jesseIsOut":
|
||
if (value is bool jio) { jesseIsOut = jio; return true; }
|
||
break;
|
||
case "workingWithLydia":
|
||
if (value is bool wwl) { workingWithLydia = wwl; return true; }
|
||
break;
|
||
case "usingVamonosPest":
|
||
if (value is bool uvp) { usingVamonosPest = uvp; return true; }
|
||
break;
|
||
case "hankKnows":
|
||
if (value is bool hk) { hankKnows = hk; return true; }
|
||
break;
|
||
case "waltIsDisappeared":
|
||
if (value is bool wid) { waltIsDisappeared = wid; return true; }
|
||
break;
|
||
case "trainHeistSuccess":
|
||
if (value is int ths) { trainHeistSuccess = ths; return true; }
|
||
break;
|
||
case "dealingWithJacksCrew":
|
||
if (value is bool dwjc) { dealingWithJacksCrew = dwjc; return true; }
|
||
break;
|
||
case "familyLost":
|
||
if (value is bool fl) { familyLost = fl; return true; }
|
||
break;
|
||
case "jesseMentalState":
|
||
if (value is int jms) { jesseMentalState = jms; return true; }
|
||
break;
|
||
case "skylerInvolvement":
|
||
if (value is int si) { skylerInvolvement = si; return true; }
|
||
break;
|
||
case "hankInvestigationProgress":
|
||
if (value is int hip) { hankInvestigationProgress = hip; return true; }
|
||
break;
|
||
case "ricinUsedSuccessfully":
|
||
if (value is bool rus) { ricinUsedSuccessfully = rus; return true; }
|
||
break;
|
||
case "greyMatterThreatened":
|
||
if (value is bool gmt) { greyMatterThreatened = gmt; return true; }
|
||
break;
|
||
case "andreaKnows":
|
||
if (value is bool ak) { andreaKnows = ak; return true; }
|
||
break;
|
||
case "carWashOwned":
|
||
if (value is bool cwo) { carWashOwned = cwo; return true; }
|
||
break;
|
||
}
|
||
if (devConsole != null)
|
||
{
|
||
devConsole.UpdateValues();
|
||
}
|
||
return true;
|
||
}
|
||
catch
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private void ResetGameState()
|
||
{
|
||
// Сбрасываем все состояние игры к начальным значениям
|
||
money = 7000;
|
||
suspicion = 0;
|
||
hasJesse = false; // Джесси снова доступен в начале
|
||
hasRV = false;
|
||
hasIngredients = false;
|
||
firstBatchCooked = false;
|
||
firstBatchSold = false;
|
||
knowsSaul = false;
|
||
knowsGus = false;
|
||
worksForGus = false;
|
||
knowsMike = false;
|
||
superLabBuilt = false;
|
||
batchQuality = 96;
|
||
hankIsSuspicious = false;
|
||
killedTuco = false; // Сброс флага Туко
|
||
knowsGale = false;
|
||
skylerKnows = false;
|
||
saulRelationship = 0;
|
||
gusRelationship = 0;
|
||
|
||
// Сброс новых переменных для расширенного сюжета
|
||
gusIsDead = false;
|
||
mikeIsPartner = false;
|
||
jesseIsOut = false;
|
||
workingWithLydia = false;
|
||
usingVamonosPest = false;
|
||
hankKnows = false;
|
||
waltIsDisappeared = false;
|
||
trainHeistSuccess = 0;
|
||
dealingWithJacksCrew = false;
|
||
familyLost = false;
|
||
jesseMentalState = 0;
|
||
skylerInvolvement = 0;
|
||
hankInvestigationProgress = 0;
|
||
ricinUsedSuccessfully = false;
|
||
greyMatterThreatened = false;
|
||
andreaKnows = false;
|
||
carWashOwned = false;
|
||
|
||
|
||
// Сброс UI элементов (на всякий случай)
|
||
UpdateSuspicionUI();
|
||
UpdateMoneyUI();
|
||
|
||
if (devConsole != null)
|
||
{
|
||
devConsole.UpdateValues();
|
||
}
|
||
}
|
||
|
||
public void GoToStage(int stage)
|
||
{
|
||
currentStage = stage;
|
||
ResetButtons();
|
||
|
||
// --- Логика Сюжетных Этапов ---
|
||
// --- Логика Сюжетных Этапов ---
|
||
switch (stage)
|
||
{
|
||
// --- Начальные Этапы (0-14) ---
|
||
// Оставляем существующие этапы 0-14 как есть, но
|
||
// ВАЖНО: Убедитесь, что вызовы SetupButton в этих этапах
|
||
// соответствуют сигнатуре (с cost и suspicionIncrease) и логике.
|
||
// Я скопирую их из вашего кода для полноты, но проверьте их у себя.
|
||
case 0: // Начало
|
||
metroLabelStory.Text = "Вы Уолтер Уайт, учитель химии. Диагноз 'рак' и финансовые проблемы толкают вас на отчаянный шаг. Нужны деньги, и быстро. \n\nЧто делать?";
|
||
SetupButton(metroButtonChoice1, "Попробовать варить метамфетамин самому", 1, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice2, "Найти бывшего ученика, Джесси Пинкмана. Он в теме.", 2);
|
||
break;
|
||
|
||
case 1: // Варить самому (Плохая идея без подготовки)
|
||
metroLabelStory.Text = "Варить в школьной лаборатории? Слишком рискованно. Нужна мобильная лаборатория и ингредиенты. У вас только $7000.\n\nВаши действия?";
|
||
SetupButton(metroButtonChoice1, "Купить старый фургон (RV)", 3, cost: 5000);
|
||
SetupButton(metroButtonChoice2, "Сначала найти Джесси. У него могут быть связи.", 2);
|
||
break;
|
||
|
||
case 2: // Найти Джесси
|
||
metroLabelStory.Text = "Вы находите Джесси. Он удивлен, но идея заработать кажется ему заманчивой, хоть и опасной. 'Йоу, Мистер Уайт! Варить мет? Вы серьезно?'\n\nОн согласен помочь, но нужна 'лаба на колесах'.";
|
||
hasJesse = true; // Устанавливаем флаг здесь, при нахождении Джесси
|
||
SetupButton(metroButtonChoice1, "Купить старый фургон (RV) на ваши деньги", 3, cost: 5000);
|
||
SetupButton(metroButtonChoice2, "Убедить Джесси вложиться в RV (Риск)", 4, cost: 2500); // Стоимость для Уолта
|
||
break;
|
||
|
||
case 3: // Купить RV
|
||
metroLabelStory.Text = "Вы нашли ржавый, но вместительный дом на колесах. Не 'Кристальный корабль' мечты, но сойдет. Теперь нужны ингредиенты и место для варки.";
|
||
hasRV = true; // Устанавливаем флаг здесь
|
||
SetupButton(metroButtonChoice1, "Купить прекурсоры легально (Дорого)", 5, cost: 1500);
|
||
SetupButton(metroButtonChoice2, "Попробовать 'достать' химикаты (Риск)", 6, suspicionIncrease: 2);
|
||
break;
|
||
|
||
case 4: // Джесси вкладывается в RV
|
||
metroLabelStory.Text = "Джесси нехотя соглашается скинуться на RV. 'Ладно, Мистер Уайт, но половина прибыли моя, йоу!' Фургон куплен. Нужны ингредиенты.";
|
||
hasRV = true; // Устанавливаем флаги здесь
|
||
hasJesse = true; // На случай, если пришли сюда не из этапа 2
|
||
SetupButton(metroButtonChoice1, "Купить прекурсоры легально (Дорого)", 5, cost: 1500);
|
||
SetupButton(metroButtonChoice2, "Пусть Джесси 'достанет' химикаты (Риск)", 6, suspicionIncrease: 2);
|
||
break;
|
||
|
||
case 5: // Купить ингредиенты легально
|
||
metroLabelStory.Text = "Ингредиенты куплены. Дорого, но без лишнего внимания. Теперь нужно найти укромное место для варки.";
|
||
hasIngredients = true; // Устанавливаем флаг здесь
|
||
SetupButton(metroButtonChoice1, "Ехать в пустыню", 7, suspicionIncrease: 1); // Небольшой риск за саму варку
|
||
SetupButton(metroButtonChoice2, "Рискнуть и варить в промзоне ночью", 8, suspicionIncrease: 3);
|
||
break;
|
||
|
||
case 6: // Достать ингредиенты нелегально
|
||
metroLabelStory.Text = (hasJesse ? "Джесси" : "Вы") + " 'достали' необходимые химикаты. Это было нервно, но сэкономило деньги. Уровень подозрения вырос. Пора варить.";
|
||
hasIngredients = true; // Устанавливаем флаг здесь
|
||
SetupButton(metroButtonChoice1, "Ехать в пустыню", 7, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice2, "Рискнуть и варить в промзоне ночью", 8, suspicionIncrease: 3);
|
||
break;
|
||
|
||
case 7: // Варка в пустыне
|
||
metroLabelStory.Text = "Пустыня. Жарко, пыльно, но безопасно. " + (hasJesse ? "Вы с Джесси " : "Вы ") + $"успешно сварили первую партию чистейшего ({batchQuality}%) синего метамфетамина. Продукт готов.\n\nЧто дальше?";
|
||
firstBatchCooked = true; // Устанавливаем флаг здесь
|
||
// Подозрение увеличивается при выборе действия
|
||
SetupButton(metroButtonChoice1, "Продать через контакты Джесси (если он есть)", 9, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice2, "Искать более крупного дилера (Риск)", 10, suspicionIncrease: 3);
|
||
if (!hasJesse) metroButtonChoice1.Enabled = false;
|
||
break;
|
||
|
||
case 8: // Варка в промзоне (Риск)
|
||
if (suspicion >= 7) // Проверка до отображения текста
|
||
{
|
||
GoToStage(STAGE_GAME_OVER_CAUGHT_COOKING);
|
||
return;
|
||
}
|
||
metroLabelStory.Text = "Варка в промзоне прошла удачно, но это было слишком опасно. Повсюду камеры, случайные патрули... Больше так лучше не делать. Первая партия ({batchQuality}%) готова.";
|
||
firstBatchCooked = true; // Устанавливаем флаг здесь
|
||
SetupButton(metroButtonChoice1, "Продать через контакты Джесси", 9, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice2, "Искать более крупного дилера (Риск)", 10, suspicionIncrease: 3);
|
||
if (!hasJesse) metroButtonChoice1.Enabled = false;
|
||
break;
|
||
|
||
case 9: // Продажа через Джесси (Крейзи-8)
|
||
if (!hasJesse) // Проверка в начале этапа
|
||
{
|
||
metroLabelStory.Text = "У вас нет Джесси, чтобы продать через его контакты. Нужно искать другой способ сбыта товара.";
|
||
SetupButton(metroButtonChoice1, "Искать другого дилера", 10, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice2, "Уничтожить улики и залечь на дно", STAGE_END_FEAR);
|
||
return; // Выход, так как состояние изменилось
|
||
}
|
||
metroLabelStory.Text = "Джесси нашел покупателя - местного дилера Крейзи-8. Сделка прошла не очень гладко, но товар продан. Вы получили свою долю.";
|
||
money += 10000;
|
||
firstBatchSold = true; // Устанавливаем флаг здесь
|
||
hasIngredients = false; // Ингредиенты кончились
|
||
firstBatchCooked = false; // Партия продана
|
||
SetupButton(metroButtonChoice1, "Продолжить варить и продавать", 11);
|
||
SetupButton(metroButtonChoice2, "Залечь на дно. Это слишком опасно.", STAGE_END_CAUTIOUS);
|
||
break;
|
||
|
||
case 10: // Искать крупного дилера (Туко)
|
||
metroLabelStory.Text = "Вы пытаетесь найти более серьезного покупателя. Это выводит вас на людей Туко Саламанки. Они заинтересованы, но требуют 'доказательств серьезности'. Сделка назначена.";
|
||
SetupButton(metroButtonChoice1, "Идти на сделку с Туко", 12, suspicionIncrease: 3); // Переход к прямой сделке
|
||
SetupButton(metroButtonChoice2, "Отказаться. Слишком опасно.", 13, suspicionIncrease: 1);
|
||
break;
|
||
|
||
case 11: // Следующий шаг после продажи (через Крейзи-8)
|
||
metroLabelStory.Text = "Первые деньги заработаны, но это капля в море ваших проблем. Путь назад отрезан? Или еще можно остановиться?";
|
||
SetupButton(metroButtonChoice1, "Сварить еще партию", 14);
|
||
SetupButton(metroButtonChoice2, "Довольно. Хватит рисковать.", STAGE_END_CAUTIOUS);
|
||
if (money >= 80000) // Нужна приличная сумма для автомойки
|
||
SetupButton(metroButtonChoice3, "Купить автомойку (Начало легализации?)", STAGE_END_EMPIRE, cost: 80000);
|
||
break;
|
||
|
||
case 12: // Сделка с Туко (первая)
|
||
metroLabelStory.Text = "Встреча с Туко Саламанкой. Он эксцентричен и опасен. Он пробует ваш продукт. 'Тайт! Тайт! Тайт! Это чистяк!' Он согласен купить, но платит лишь часть вперед.";
|
||
money += 7000; // Меньше, чем хотелось бы
|
||
suspicion += 2; // Связь с крупным дилером
|
||
firstBatchSold = true;
|
||
hasIngredients = false;
|
||
firstBatchCooked = false;
|
||
SetupButton(metroButtonChoice1, "Потребовать оставшуюся сумму (Очень рискованно!)", 15, suspicionIncrease: 5);
|
||
SetupButton(metroButtonChoice2, "Согласиться и ждать следующего заказа", 16, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice3, "Прекратить контакты с Туко. Слишком опасно.", 13); // Вернуться к отказу
|
||
break;
|
||
|
||
case 13: // Отказ от сделки / разрыв с Туко
|
||
metroLabelStory.Text = "Вы решили не связываться или прекратить контакты с Туко. Это безопаснее в краткосрочной перспективе, но люди вроде Туко не любят, когда им отказывают или их бросают. Вы привлекли ненужное внимание.";
|
||
// Если товар еще не продан:
|
||
if (firstBatchCooked && !firstBatchSold)
|
||
{
|
||
SetupButton(metroButtonChoice1, "Попытаться продать через Джесси (если есть)", 9, suspicionIncrease: 1); // Менее рискованно сейчас
|
||
SetupButton(metroButtonChoice2, "Уничтожить партию и залечь на дно", STAGE_END_FEAR);
|
||
if (!hasJesse) metroButtonChoice1.Enabled = false;
|
||
}
|
||
else // Если товар продан или не был сварен
|
||
{
|
||
SetupButton(metroButtonChoice1, "Искать других, менее опасных дилеров", 17); // Новый этап
|
||
SetupButton(metroButtonChoice2, "Залечь на дно на время", STAGE_END_CAUTIOUS);
|
||
}
|
||
break;
|
||
|
||
case 14: // Рецидив (Сварить еще) - Общий этап
|
||
metroLabelStory.Text = "Вы решаете сварить еще. Азарт или нужда? Граница стирается. Нужны новые ингредиенты...";
|
||
hasIngredients = false;
|
||
firstBatchCooked = false;
|
||
firstBatchSold = false;
|
||
SetupButton(metroButtonChoice1, "Купить легально", 5, cost: 1500 + (suspicion * 100)); // Цена растет с подозрением?
|
||
SetupButton(metroButtonChoice2, "'Достать'", 6, suspicionIncrease: 2 + (suspicion / 2)); // Риск растет
|
||
// Возможность улучшить качество?
|
||
if (money > 5000)
|
||
SetupButton(metroButtonChoice3, "Инвестировать в улучшение процесса (выше качество?)", 18, cost: 5000);
|
||
break;
|
||
|
||
// --- Новые Этапы (15+) ---
|
||
|
||
case 15: // Требовать деньги у Туко
|
||
killedTuco = (new Random().Next(0, 10) < 3); // 30% шанс, что вы его убьете (как в сериале, но случайно)
|
||
if (killedTuco)
|
||
{
|
||
money += 20000; // Забрали все деньги
|
||
suspicion += 6; // ОЧЕНЬ подозрительно
|
||
metroLabelStory.Text = "Конфликт вышел из-под контроля! Вы... вы убили Туко! Вы забрали его деньги, но теперь за вами могут охотиться его люди. И полиция.";
|
||
SetupButton(metroButtonChoice1, "Немедленно скрыться (игра окончена?)", STAGE_END_FEAR);
|
||
SetupButton(metroButtonChoice2, "Попытаться замести следы и продолжить", 19, suspicionIncrease: 4); // Новый этап: последствия
|
||
}
|
||
else
|
||
{
|
||
suspicion += 5;
|
||
metroLabelStory.Text = "Туко в ярости! Он избил " + (hasJesse ? "Джесси" : "вас") + " и забрал весь товар, не заплатив. 'Никогда больше не приходи ко мне, червь!' Вы потеряли все и привлекли ОЧЕНЬ опасное внимание.";
|
||
firstBatchSold = false; // Товар потерян
|
||
firstBatchCooked = false;
|
||
hasIngredients = false;
|
||
GoToStage(STAGE_END_FEAR); // По сути, это конец игры
|
||
// SetupButton(metroButtonChoice1, "Залечь на дно и молиться", STAGE_END_FEAR);
|
||
// SetupButton(metroButtonChoice2, "Искать способ отомстить (Безумие!)", 105); // Новая концовка - провал мести?
|
||
}
|
||
break;
|
||
|
||
case 16: // Сотрудничество с Туко
|
||
metroLabelStory.Text = "Вы продолжаете работать с Туко. Он платит хорошо, но его непредсказуемость держит в постоянном напряжении. Он требует новую, большую партию.";
|
||
money += 15000; // Получили остаток
|
||
suspicion += 1;
|
||
firstBatchSold = true;
|
||
hasIngredients = false;
|
||
firstBatchCooked = false;
|
||
SetupButton(metroButtonChoice1, "Сварить новую партию для Туко", 14); // Возврат к циклу варки
|
||
SetupButton(metroButtonChoice2, "Попробовать найти другого дилера, пока Туко не 'слетел с катушек'", 17, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice3, "Задуматься о безопасности. Нужен юрист?", 20); // К Солу?
|
||
break;
|
||
|
||
case 17: // Поиск других дилеров
|
||
metroLabelStory.Text = "Искать новых дилеров рискованно. Улица полна опасностей: конкуренты, информаторы, подставные сделки.";
|
||
bool foundDealer = (new Random().Next(0, 10) < 6); // 60% шанс найти
|
||
suspicion += 2;
|
||
if (foundDealer)
|
||
{
|
||
metroLabelStory.Text += "\n\nВам повезло. Вы нашли пару мелких дилеров, готовых брать ваш товар. Прибыль меньше, но и риска меньше, чем с Туко.";
|
||
// Сразу имитируем продажу небольшой партии, если она есть
|
||
if (firstBatchCooked && !firstBatchSold)
|
||
{
|
||
money += 8000;
|
||
firstBatchSold = true;
|
||
hasIngredients = false;
|
||
firstBatchCooked = false;
|
||
metroLabelStory.Text += "\nВы продали имеющуюся партию.";
|
||
}
|
||
SetupButton(metroButtonChoice1, "Работать с мелкими дилерами", 11); // Назад к выбору после продажи
|
||
SetupButton(metroButtonChoice2, "Продолжать искать выход на крупную рыбу", 21, suspicionIncrease: 2); // К Гасу?
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text += "\n\nПоиски не увенчались успехом. Вы только привлекли больше внимания. Что делать с готовым товаром?";
|
||
if (firstBatchCooked && !firstBatchSold)
|
||
{
|
||
SetupButton(metroButtonChoice1, "Попытаться снова продать через Джесси", 9);
|
||
SetupButton(metroButtonChoice2, "Уничтожить партию", STAGE_END_FEAR);
|
||
if (!hasJesse) metroButtonChoice1.Enabled = false;
|
||
}
|
||
else
|
||
{
|
||
SetupButton(metroButtonChoice1, "Продолжить варить, надеясь найти покупателя позже", 14);
|
||
SetupButton(metroButtonChoice2, "Залечь на дно", STAGE_END_CAUTIOUS);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 18: // Улучшение процесса
|
||
metroLabelStory.Text = "Вы потратили время и деньги на оптимизацию процесса варки. Теперь ваш продукт еще чище!";
|
||
batchQuality = Math.Min(99, batchQuality + 2); // Увеличиваем качество, макс 99%
|
||
suspicion += 1; // Доп. активность
|
||
SetupButton(metroButtonChoice1, "Сварить партию улучшенного качества", 14);
|
||
break;
|
||
|
||
case 19: // Последствия убийства Туко
|
||
metroLabelStory.Text = "Убийство Туко не прошло незамеченным. Картель и полиция ищут виновных. Вам нужно быть предельно осторожным.";
|
||
hankIsSuspicious = true; // Хэнк точно заинтересуется этим делом
|
||
SetupButton(metroButtonChoice1, "Немедленно сменить место варки и залечь на дно", 22, suspicionIncrease: -1); // Снижаем подозрение за осторожность
|
||
SetupButton(metroButtonChoice2, "Продолжать варить, но с удвоенной осторожностью", 14, suspicionIncrease: 3); // Очень рискованно
|
||
SetupButton(metroButtonChoice3, "Срочно нужен адвокат!", 20); // К Солу
|
||
break;
|
||
|
||
case 20: // Найти адвоката (Сол Гудман)
|
||
metroLabelStory.Text = "Вы слышали о 'криминальном' адвокате Соле Гудмане. 'Лучше звоните Солу!' гласит его реклама. Он может помочь с отмыванием денег и юридическими проблемами, но его услуги стоят денег, и он сам по себе риск.";
|
||
knowsSaul = true;
|
||
saulRelationship = 1; // Начальное знакомство
|
||
suspicion += 1; // Контакт с криминальным элементом
|
||
SetupButton(metroButtonChoice1, "Нанять Сола для консультации", 23, cost: 5000);
|
||
SetupButton(metroButtonChoice2, "Пока не рисковать связываться с ним", currentStage); // Вернуться к предыдущему этапу (нужно знать откуда пришли)
|
||
// Плохая практика возвращаться к currentStage, лучше явно указать предыдущий этап
|
||
// Вместо currentStage лучше использовать более явный возврат, например:
|
||
// if (откуда_пришли == 16) SetupButton(metroButtonChoice2, "Пока не рисковать", 16);
|
||
// else if (откуда_пришли == 19) SetupButton(metroButtonChoice2, "Пока не рисковать", 19);
|
||
// Для простоты пока оставим так, но это нужно будет исправить при расширении
|
||
SetupButton(metroButtonChoice2, "Пока не рисковать связываться с ним", 16); // Предположим, что чаще приходят из 16
|
||
break;
|
||
|
||
case 21: // Искать крупную рыбу (Путь к Гасу)
|
||
metroLabelStory.Text = "Вы ищете выход на серьезных игроков. Это опасно, но сулит большие деньги и стабильность... если вы им понравитесь.";
|
||
suspicion += 2;
|
||
if (knowsSaul && saulRelationship > 0)
|
||
{
|
||
metroLabelStory.Text += "\n\nВозможно, Сол Гудман может помочь?";
|
||
SetupButton(metroButtonChoice1, "Спросить Сола о контактах", 24); // Через Сола
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text += "\n\nБез связей это почти невозможно и очень опасно.";
|
||
SetupButton(metroButtonChoice1, "Рискнуть и поспрашивать в криминальных кругах", 25, suspicionIncrease: 4); // Опасный путь
|
||
}
|
||
SetupButton(metroButtonChoice2, "Отказаться от идеи. Слишком опасно.", 17); // Вернуться к мелким дилерам
|
||
break;
|
||
|
||
case 22: // Залечь на дно после убийства Туко
|
||
metroLabelStory.Text = "Вы сменили фургон (если он был), уничтожили старое оборудование и затаились. Подозрение немного спало, но деньги заканчиваются, а картель ничего не забывает.";
|
||
hasRV = false; // Старый RV скомпрометирован
|
||
firstBatchCooked = false;
|
||
hasIngredients = false;
|
||
money -= 2000; // Расходы на переезд и т.д.
|
||
SetupButton(metroButtonChoice1, "Попробовать начать все сначала (купить новый RV?)", 1, cost: 7000, suspicionIncrease: 2); // Нужно больше денег на новый RV
|
||
SetupButton(metroButtonChoice2, "Найти 'нормальную' работу (Конец игры?)", STAGE_END_CAUTIOUS);
|
||
if (knowsSaul)
|
||
SetupButton(metroButtonChoice3, "Попросить Сола помочь 'исчезнуть'", 106, cost: 50000); // Новая концовка - исчезновение
|
||
break;
|
||
|
||
case 23: // Консультация у Сола
|
||
metroLabelStory.Text = "Сол Гудман - тот еще фрукт. Он предлагает свои услуги по отмыванию денег и 'решению проблем'. 'Я знаю парня, который знает парня...' Его помощь неоценима, но вы теперь 'в его списке'.";
|
||
saulRelationship += 2; // Улучшение отношений
|
||
SetupButton(metroButtonChoice1, "Воспользоваться услугами Сола по отмыванию денег", 26, cost: (int)(money * 0.1), suspicionIncrease: -1); // % от суммы, снижает подозрение
|
||
SetupButton(metroButtonChoice2, "Спросить Сола о выходе на крупного дистрибьютора", 24);
|
||
SetupButton(metroButtonChoice3, "Вежливо отказаться от его услуг пока", 16); // Вернуться к предыдущему состоянию (примерно)
|
||
break;
|
||
|
||
case 24: // Сол ищет контакты (к Гасу)
|
||
metroLabelStory.Text = "Сол мнется, но соглашается навести справки. 'Есть один человек. Очень осторожный. Очень профессиональный. Не любит сюрпризов. Если я вас сведу, не облажайтесь!'";
|
||
saulRelationship += 1;
|
||
SetupButton(metroButtonChoice1, "Согласиться на встречу, организованную Солом", 27); // Встреча с Гасом/Майком
|
||
SetupButton(metroButtonChoice2, "Поблагодарить и отказаться. Слишком серьезно.", 23); // Назад к Солу
|
||
break;
|
||
|
||
case 25: // Опасный поиск контактов
|
||
bool gusFoundDirectly = (new Random().Next(0, 10) < 1); // Очень малый шанс (10%) выйти на Гаса напрямую/через его людей
|
||
if (gusFoundDirectly)
|
||
{
|
||
metroLabelStory.Text = "Невероятно, но ваши поиски привлекли внимание нужных людей. С вами связался некто Майк Эрмантраут. Он хочет поговорить.";
|
||
knowsMike = true;
|
||
SetupButton(metroButtonChoice1, "Встретиться с Майком", 28); // Встреча с Майком
|
||
}
|
||
else
|
||
{
|
||
suspicion += 3;
|
||
metroLabelStory.Text = "Ваши действия привлекли внимание полиции или конкурентов. За вами теперь следят еще пристальнее.";
|
||
hankIsSuspicious = true; // Хэнк мог узнать
|
||
SetupButton(metroButtonChoice1, "Немедленно прекратить поиски и залечь на дно", STAGE_END_FEAR);
|
||
SetupButton(metroButtonChoice2, "Обратиться к Солу Гудману за помощью (если знаете)", 20);
|
||
if (!knowsSaul) metroButtonChoice2.Enabled = false;
|
||
}
|
||
break;
|
||
|
||
case 26: // Сол отмывает деньги
|
||
int launderedMoney = money - (int)(money * 0.1); // Сколько останется после комиссии Сола
|
||
money = launderedMoney; // Обновляем баланс
|
||
suspicion = Math.Max(0, suspicion - 1); // Снижаем подозрение
|
||
metroLabelStory.Text = $"Сол успешно 'отмыл' ваши деньги через подставные фирмы. У вас теперь ${money} 'чистыми'. Подозрение немного снизилось.";
|
||
// Дальше можно вернуться к разным точкам сюжета
|
||
SetupButton(metroButtonChoice1, "Продолжать варить и копить деньги", 14);
|
||
SetupButton(metroButtonChoice2, "Инвестировать в легальный бизнес (Автомойка?)", STAGE_END_EMPIRE, cost: 80000);
|
||
if (!knowsGus) SetupButton(metroButtonChoice3, "Спросить Сола о выходе на крупного дистрибьютора", 24);
|
||
break;
|
||
|
||
case 27: // Встреча, организованная Солом (с Майком/Гасом)
|
||
metroLabelStory.Text = "Встреча проходит в неожиданном месте - ресторане Los Pollos Hermanos. Вас встречает его владелец, Густаво Фринг. Он спокоен, вежлив, но его глаза пронизывают насквозь. Он впечатлен качеством вашего продукта.";
|
||
knowsGus = true;
|
||
gusRelationship = 1; // Начальное знакомство
|
||
knowsMike = true; // Майк тоже здесь
|
||
SetupButton(metroButtonChoice1, "Предложить ему партнерство", 29);
|
||
SetupButton(metroButtonChoice2, "Выслушать его предложение", 30);
|
||
SetupButton(metroButtonChoice3, "Отказаться от сотрудничества. Он пугает.", 31);
|
||
break;
|
||
|
||
case 28: // Встреча с Майком
|
||
metroLabelStory.Text = "Майк Эрмантраут - бывший коп, немногословный и профессиональный. Он работает на 'очень серьезного человека', который заинтересован в стабильных поставках качественного продукта. Он оценивает вас.";
|
||
knowsMike = true;
|
||
SetupButton(metroButtonChoice1, "Показать образец продукта", 32);
|
||
SetupButton(metroButtonChoice2, "Попытаться узнать, на кого он работает (Риск)", 33);
|
||
SetupButton(metroButtonChoice3, "Отказаться от разговора", 17); // Назад к поиску
|
||
break;
|
||
|
||
case 29: // Предложить партнерство Гасу
|
||
metroLabelStory.Text = "Гас внимательно слушает. 'Партнерство? Нет, мистер Уайт. Я не ищу партнеров. Я ищу поставщиков. Надежных. Профессиональных. Если вы готовы работать НА меня, мы можем обсудить условия.'";
|
||
SetupButton(metroButtonChoice1, "Согласиться работать на него", 30); // К его предложению
|
||
SetupButton(metroButtonChoice2, "Отказаться. Вы хотите быть боссом.", 31);
|
||
break;
|
||
|
||
case 30: // Предложение Гаса
|
||
metroLabelStory.Text = "Гас предлагает невероятные условия: $3 миллиона за 3 месяца работы в современной, оборудованной лаборатории. Никаких проблем с сырьем и сбытом. Но вы будете полностью под его контролем.";
|
||
SetupButton(metroButtonChoice1, "Принять предложение Гаса", 34, suspicionIncrease: -2); // Работа на Гаса снижает подозрение (поначалу)
|
||
SetupButton(metroButtonChoice2, "Отказаться. Слишком большая цена за свободу.", 31);
|
||
SetupButton(metroButtonChoice3, "Попытаться торговаться (Риск)", 35);
|
||
break;
|
||
|
||
case 31: // Отказ от сотрудничества с Гасом
|
||
metroLabelStory.Text = "Вы отказываетесь от предложения Гаса. Он смотрит на вас холодно. 'Жаль. Возможно, вы передумаете.' Вы чувствуете, что этот отказ может иметь последствия.";
|
||
gusRelationship = -1; // Небольшое ухудшение
|
||
// Возвращаемся к поиску других вариантов
|
||
SetupButton(metroButtonChoice1, "Продолжать работать с мелкими дилерами", 17);
|
||
SetupButton(metroButtonChoice2, "Попробовать снова варить в RV", 14);
|
||
if (knowsSaul) SetupButton(metroButtonChoice3, "Посоветоваться с Солом", 23);
|
||
break;
|
||
|
||
case 32: // Показать образец Майку
|
||
metroLabelStory.Text = "Майк осматривает образец. 'Качество хорошее. Мой босс будет доволен. Он сделает вам предложение.'";
|
||
SetupButton(metroButtonChoice1, "Ждать предложения", 36); // Ждем звонка/встречи от Гаса
|
||
SetupButton(metroButtonChoice2, "Спросить об условиях сейчас", 33);
|
||
break;
|
||
|
||
case 33: // Узнать о боссе Майка / условиях
|
||
metroLabelStory.Text = "Майк смотрит на вас без эмоций. 'Меньше знаешь - крепче спишь. Условия узнаешь, когда придет время. Не торопись.'";
|
||
suspicion += 1; // За излишнее любопытство
|
||
SetupButton(metroButtonChoice1, "Ждать предложения", 36);
|
||
SetupButton(metroButtonChoice2, "Отказаться от дальнейших контактов", 17);
|
||
break;
|
||
|
||
case 34: // Принять предложение Гаса (Начало работы в суперлабе)
|
||
metroLabelStory.Text = "Вы начинаете работать в суперсовременной лаборатории под прачечной Гаса. Условия идеальные. Вам назначают помощника - Гейла Беттикера, талантливого химика.";
|
||
worksForGus = true;
|
||
superLabBuilt = true; // Лаборатория есть
|
||
knowsGale = true;
|
||
money += 500000; // Аванс?
|
||
suspicion = Math.Max(0, suspicion - 2); // Гас обеспечивает прикрытие
|
||
hasRV = false; // RV больше не нужен
|
||
SetupButton(metroButtonChoice1, "Работать с Гейлом, выполнять план", 37);
|
||
SetupButton(metroButtonChoice2, "Попытаться заменить Гейла на Джесси (Риск)", 38, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice3, "Сосредоточиться на работе и копить деньги", 37); // То же что и 1
|
||
break;
|
||
|
||
case 35: // Торговаться с Гасом
|
||
metroLabelStory.Text = "Гас слушает вашу попытку торговаться с непроницаемым лицом. 'Мое предложение окончательное, мистер Уайт. Принимайте или уходите.' Он не терпит неуважения.";
|
||
gusRelationship -= 1; // Ухудшение отношений
|
||
SetupButton(metroButtonChoice1, "Принять его первоначальное предложение", 34);
|
||
SetupButton(metroButtonChoice2, "Уйти", 31);
|
||
break;
|
||
|
||
case 36: // Ждать предложения после встречи с Майком
|
||
metroLabelStory.Text = "Через некоторое время Майк связывается с вами и передает предложение от своего босса. Оно совпадает с тем, что вы слышали бы от Гаса напрямую: $3 миллиона за 3 месяца работы.";
|
||
SetupButton(metroButtonChoice1, "Принять предложение", 34);
|
||
SetupButton(metroButtonChoice2, "Отказаться", 31);
|
||
break;
|
||
|
||
case 37: // Работа с Гейлом в суперлабе
|
||
metroLabelStory.Text = $"Вы и Гейл работаете слаженно. Производство идет по плану. Качество стабильно высокое ({batchQuality}%). Гас доволен. Деньги поступают регулярно.";
|
||
money += 1000000; // Ежемесячная оплата (примерно)
|
||
suspicion = Math.Max(0, suspicion - 1); // Безопасная работа
|
||
// Добавить проверку на завершение 3-месячного контракта?
|
||
SetupButton(metroButtonChoice1, "Продолжать работать", 37); // Цикл работы
|
||
SetupButton(metroButtonChoice2, "Заметить, что Гейл слишком много знает...", 39, suspicionIncrease: 1); // Паранойя
|
||
if (hasJesse && !worksForGus) // Если Джесси еще не работает с вами
|
||
SetupButton(metroButtonChoice3, "Предложить Гасу взять Джесси", 38, suspicionIncrease: 1);
|
||
break;
|
||
|
||
case 38: // Заменить Гейла на Джесси
|
||
metroLabelStory.Text = "Вы убеждаете Гаса, что Джесси - более подходящий (или контролируемый?) партнер. Гас неохотно соглашается, но предупреждает, что любые проблемы будут на вашей совести.";
|
||
knowsGale = false; // Гейла убрали
|
||
hasJesse = true; // Джесси теперь здесь
|
||
worksForGus = true; // Оба работают на Гаса
|
||
gusRelationship -= 1; // Гасу это не очень нравится
|
||
suspicion += 1; // Лишние движения
|
||
metroLabelStory.Text += "\n\nТеперь вы работаете с Джесси в суперлабе.";
|
||
SetupButton(metroButtonChoice1, "Работать с Джесси, выполнять план", 40);
|
||
SetupButton(metroButtonChoice2, "Начать снова конфликтовать с Джесси", 41); // Типично :)
|
||
break;
|
||
|
||
case 39: // Паранойя насчет Гейла
|
||
metroLabelStory.Text = "Гейл кажется слишком идеальным, слишком преданным Гасу. Вы начинаете подозревать, что Гас готовит вам замену...";
|
||
suspicion += 1;
|
||
SetupButton(metroButtonChoice1, "Игнорировать паранойю, продолжать работать", 37);
|
||
SetupButton(metroButtonChoice2, "Попробовать выведать у Гейла информацию (Риск)", 42, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice3, "Поговорить с Джесси о возможной угрозе (если он рядом)", 43);
|
||
if (!hasJesse) metroButtonChoice3.Enabled = false;
|
||
break;
|
||
|
||
case 40: // Работа с Джесси в суперлабе
|
||
metroLabelStory.Text = $"Работа с Джесси идет... по-разному. Иногда продуктивно, иногда он отвлекается или создает проблемы. Качество может страдать ({batchQuality - (new Random().Next(0, 3))}%)";
|
||
money += 900000; // Возможно, чуть меньше из-за проблем
|
||
suspicion += 1; // Джесси создает риски
|
||
batchQuality = Math.Max(90, batchQuality - 1); // Качество может падать
|
||
SetupButton(metroButtonChoice1, "Продолжать работать, пытаясь контролировать Джесси", 40); // Цикл
|
||
SetupButton(metroButtonChoice2, "Пожаловаться Гасу на Джесси (Риск!)", 44);
|
||
SetupButton(metroButtonChoice3, "Попробовать 'вдохновить' Джесси на лучшую работу", 45);
|
||
break;
|
||
|
||
case 41: // Конфликт с Джесси в лабе
|
||
metroLabelStory.Text = "Старые обиды и разница в характерах приводят к конфликтам. Ваша производительность падает. Майк делает вам строгое предупреждение.";
|
||
suspicion += 2;
|
||
gusRelationship -= 1;
|
||
batchQuality = Math.Max(85, batchQuality - 2); // Качество сильно падает
|
||
SetupButton(metroButtonChoice1, "Попытаться наладить отношения с Джесси", 45);
|
||
SetupButton(metroButtonChoice2, "Продолжать конфликтовать (Путь к увольнению?)", 41); // Опасный цикл
|
||
SetupButton(metroButtonChoice3, "Пожаловаться Гасу", 44);
|
||
break;
|
||
|
||
case 42: // Выведать информацию у Гейла
|
||
bool revealedInfo = (new Random().Next(0, 10) < 2); // Малый шанс (20%)
|
||
if (revealedInfo)
|
||
{
|
||
metroLabelStory.Text = "Гейл, будучи простодушным, случайно проговаривается о том, что Гас действительно искал химика, способного работать самостоятельно. Ваши опасения подтвердились!";
|
||
SetupButton(metroButtonChoice1, "Нужно срочно что-то делать!", 46); // К решительным действиям
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text = "Гейл ничего подозрительного не сказал. Возможно, это была просто паранойя. Но ваше любопытство могло насторожить Майка.";
|
||
suspicion += 1;
|
||
SetupButton(metroButtonChoice1, "Вернуться к работе", 37);
|
||
}
|
||
break;
|
||
|
||
case 43: // Поговорить с Джесси об угрозе (Гейл)
|
||
metroLabelStory.Text = "Вы делитесь своими опасениями с Джесси. Он тоже начинает нервничать. 'Что будем делать, Мистер Уайт?'";
|
||
SetupButton(metroButtonChoice1, "Надо устранить Гейла, пока он не устранил нас!", 47, suspicionIncrease: 5); // Очень рискованный план
|
||
SetupButton(metroButtonChoice2, "Пока просто наблюдать и быть готовым", 39); // Назад к паранойе
|
||
SetupButton(metroButtonChoice3, "Попробовать поговорить с Гасом напрямую (Безумие?)", 48);
|
||
break;
|
||
|
||
case 44: // Пожаловаться Гасу на Джесси
|
||
metroLabelStory.Text = "Гас выслушивает вас без комментариев. Через некоторое время Джесси переводят на другую работу - собирать деньги с дилеров вместе с Майком. Вы снова работаете с Гейлом.";
|
||
hasJesse = false; // Джесси больше не в лабе
|
||
knowsGale = true; // Гейл вернулся
|
||
gusRelationship += 1; // Гас ценит вашу лояльность (возможно)
|
||
suspicion -= 1; // Меньше проблем
|
||
GoToStage(37); // Возврат к работе с Гейлом
|
||
break;
|
||
|
||
case 45: // Наладить отношения / вдохновить Джесси
|
||
bool improved = (new Random().Next(0, 10) < 6); // 60% шанс
|
||
if (improved)
|
||
{
|
||
metroLabelStory.Text = "Вам удается найти общий язык с Джесси. Вы снова работаете как команда. Производительность растет.";
|
||
batchQuality = Math.Min(99, batchQuality + 1);
|
||
suspicion = Math.Max(0, suspicion - 1);
|
||
GoToStage(40); // Возврат к нормальной работе с Джесси
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text = "Ваши попытки не увенчались успехом. Джесси остается сам по себе. Конфликты продолжаются.";
|
||
GoToStage(41); // Возврат к конфликту
|
||
}
|
||
break;
|
||
|
||
case 46: // Решительные действия (Угроза от Гейла)
|
||
metroLabelStory.Text = "Вы понимаете, что Гас готовит вам замену. Нужно действовать, пока не стало поздно. Ваша жизнь на кону!";
|
||
SetupButton(metroButtonChoice1, "Приказать Джесси убить Гейла", 47, suspicionIncrease: 6); // Крайняя мера
|
||
SetupButton(metroButtonChoice2, "Попытаться саботировать работу Гейла", 49, suspicionIncrease: 3); // Менее радикально
|
||
SetupButton(metroButtonChoice3, "Бежать! Срочно бежать!", STAGE_END_FEAR);
|
||
break;
|
||
|
||
case 47: // Приказ убить Гейла
|
||
metroLabelStory.Text = "Вы заставляете Джесси сделать ужасное. Гейл убит. Вы спасли свою шкуру... пока. Но Гас будет в ярости. Это война.";
|
||
knowsGale = false; // Гейл мертв
|
||
gusRelationship = -10; // Отношения разрушены
|
||
suspicion += 10; // Максимальное подозрение от Гаса и копов
|
||
hankIsSuspicious = true; // Хэнк точно займется этим
|
||
SetupButton(metroButtonChoice1, "Готовиться к ответному удару Гаса", 50); // Следующий этап - война
|
||
SetupButton(metroButtonChoice2, "Попытаться помириться с Гасом (Невозможно?)", 51);
|
||
break;
|
||
|
||
case 48: // Поговорить с Гасом об угрозе
|
||
metroLabelStory.Text = "Гас слушает ваши опасения с ледяным спокойствием. 'Мистер Уайт, ваша паранойя начинает утомлять. Сосредоточьтесь на работе. И не делайте глупостей.' Он явно что-то скрывает, и ваш разговор только ухудшил положение.";
|
||
gusRelationship -= 2;
|
||
suspicion += 2;
|
||
SetupButton(metroButtonChoice1, "Поверить ему и вернуться к работе", 37); // Рискованно
|
||
SetupButton(metroButtonChoice2, "Он лжет! Нужно действовать!", 46); // К решительным действиям
|
||
break;
|
||
|
||
case 49: // Саботаж работы Гейла
|
||
bool sabotageSuccess = (new Random().Next(0, 10) < 4); // 40% шанс успеха
|
||
if (sabotageSuccess)
|
||
{
|
||
metroLabelStory.Text = "Вам удалось незаметно испортить несколько партий, сваренных Гейлом. Гас недоволен им, но пока не увольняет. Вы выиграли немного времени.";
|
||
batchQuality = Math.Max(80, batchQuality - 5); // Общее качество могло упасть
|
||
suspicion += 2;
|
||
SetupButton(metroButtonChoice1, "Продолжать саботаж (Риск)", 49);
|
||
SetupButton(metroButtonChoice2, "Воспользоваться моментом и предложить убрать Гейла", 38); // Предложить Джесси
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text = "Ваш саботаж был замечен Майком. Вас вызывают на серьезный разговор с Гасом. 'Мистер Уайт, ваше поведение неприемлемо. Вы уволены.'";
|
||
worksForGus = false;
|
||
gusRelationship = -5;
|
||
suspicion += 5;
|
||
GoToStage(STAGE_END_FEAR); // Гас просто так не отпустит
|
||
}
|
||
break;
|
||
|
||
case 50: // Война с Гасом
|
||
metroLabelStory.Text = "Убийство Гейла перевело конфликт в открытую фазу. Гас и Майк охотятся за вами и Джесси. Вам нужно либо убить Гаса первым, либо бежать без оглядки.";
|
||
SetupButton(metroButtonChoice1, "Разработать план убийства Гаса", 52, cost: 10000, suspicionIncrease: 5); // Нужны ресурсы
|
||
SetupButton(metroButtonChoice2, "Попросить Сола помочь исчезнуть", 106, cost: 100000); // Дорогое исчезновение
|
||
SetupButton(metroButtonChoice3, "Попытаться сдаться полиции (Конец игры)", STAGE_GAME_OVER_CAUGHT);
|
||
break;
|
||
|
||
case 51: // Попытка помириться с Гасом (после Гейла)
|
||
metroLabelStory.Text = "Вы пытаетесь связаться с Гасом, извиниться, предложить компенсацию... но он вас игнорирует. Майк передает вам последнее сообщение: 'Беги.'";
|
||
GoToStage(50); // Все равно война
|
||
break;
|
||
|
||
case 52: // План убийства Гаса
|
||
metroLabelStory.Text = "Разработать план убийства Гаса Фринга - задача почти невыполнимая. Он осторожен, умен, его охраняет Майк. Вам нужна помощь и удача.";
|
||
// Здесь могут быть разные варианты планов из сериала:
|
||
SetupButton(metroButtonChoice1, "Использовать рицин", 53, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice2, "Заминировать машину/место встречи", 54, cost: 20000, suspicionIncrease: 4);
|
||
SetupButton(metroButtonChoice3, "Привлечь кого-то из врагов Гаса (Картель?)", 55, suspicionIncrease: 3);
|
||
break;
|
||
|
||
case 53: // План убийства Гаса: Рицин
|
||
metroLabelStory.Text = "План с рицином кажется изящным, но требует возможности незаметно отравить Гаса. Где и как это сделать?";
|
||
SetupButton(metroButtonChoice1, "Попробовать подмешать в еду/напиток в Los Pollos", 56, suspicionIncrease: 3);
|
||
SetupButton(metroButtonChoice2, "Попросить Джесси передать сигарету с рицином (если он рядом)", 57, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice3, "Отказаться от рицина, нужен другой план", 52); // Назад к выбору плана
|
||
if (!hasJesse || jesseIsOut) metroButtonChoice2.Enabled = false;
|
||
break;
|
||
|
||
case 54: // План убийства Гаса: Бомба
|
||
metroLabelStory.Text = "Бомба - это громко и эффективно, но требует точного расчета и возможности заложить ее в нужном месте и в нужное время. Гас очень осторожен.";
|
||
SetupButton(metroButtonChoice1, "Попробовать заминировать его машину", 58, cost: 10000, suspicionIncrease: 4);
|
||
SetupButton(metroButtonChoice2, "Попытаться заманить его в ловушку (Больница? Дом престарелых?)", 59, cost: 5000, suspicionIncrease: 3);
|
||
SetupButton(metroButtonChoice3, "Слишком сложно и опасно, нужен другой план", 52);
|
||
break;
|
||
|
||
case 55: // План убийства Гаса: Привлечь врагов (Картель)
|
||
metroLabelStory.Text = "Идея стравить Гаса с Картелем опасна. Это может привести к полномасштабной войне, в которой вы окажетесь между молотом и наковальней.";
|
||
suspicion += 2;
|
||
SetupButton(metroButtonChoice1, "Слить Картелю информацию о передвижениях Гаса (Риск)", 60, suspicionIncrease: 5);
|
||
SetupButton(metroButtonChoice2, "Попробовать договориться с Гектором Саламанкой (если возможно)", 61, suspicionIncrease: 3); // Через Гектора
|
||
SetupButton(metroButtonChoice3, "Не ввязывать Картель, нужен другой план", 52);
|
||
break;
|
||
|
||
case 56: // Попытка отравить рицином в Los Pollos
|
||
metroLabelStory.Text = "Попытка подмешать рицин в ресторане провалилась. Гас слишком внимателен, или вам просто не представился удобный случай. План с рицином откладывается.";
|
||
suspicion += 1;
|
||
SetupButton(metroButtonChoice1, "Нужен другой план", 52);
|
||
SetupButton(metroButtonChoice2, "Попробовать снова позже (Риск)", 56); // Цикл с риском
|
||
break;
|
||
|
||
case 57: // Джесси передает рицин
|
||
metroLabelStory.Text = "Джесси не смог заставить себя отравить Брока (или другого посредника). План с рицином через него провалился. Он зол на вас за это.";
|
||
// Ухудшение отношений с Джесси можно отразить отдельной переменной, если нужно
|
||
suspicion += 1;
|
||
SetupButton(metroButtonChoice1, "Винить Джесси и искать другой план", 52);
|
||
SetupButton(metroButtonChoice2, "Понять Джесси и искать другой план вместе?", 52);
|
||
break;
|
||
|
||
case 58: // Заминировать машину Гаса
|
||
metroLabelStory.Text = "Вы установили бомбу под машину Гаса, но он почувствовал неладное и не стал садиться в нее. План провалился, вы чуть не попались.";
|
||
suspicion += 3;
|
||
money -= 10000; // Потеря денег на компоненты
|
||
SetupButton(metroButtonChoice1, "Нужен другой план", 52);
|
||
SetupButton(metroButtonChoice2, "Попробовать заманить его в ловушку", 59);
|
||
break;
|
||
|
||
case 59: // Ловушка для Гаса (Дом престарелых)
|
||
metroLabelStory.Text = "Вам нужна приманка. Гектор Саламанка - единственный, кого Гас ненавидит достаточно, чтобы прийти лично. Но как заставить Гектора помочь?";
|
||
SetupButton(metroButtonChoice1, "Убедить Гектора помочь взорвать Гаса", 61); // К Гектору
|
||
SetupButton(metroButtonChoice2, "Отказаться от плана, слишком сложно", 52);
|
||
break;
|
||
|
||
case 60: // Слить информацию Картелю
|
||
metroLabelStory.Text = "Вы передали информацию Картелю, но это не привело к смерти Гаса. Возможно, он был готов, или Картель не смог его достать. Теперь Гас знает, что вы работаете против него.";
|
||
suspicion += 4;
|
||
gusRelationship = -10; // Окончательный разрыв
|
||
GoToStage(50); // Война неизбежна
|
||
break;
|
||
|
||
case 61: // Договориться с Гектором Саламанкой
|
||
metroLabelStory.Text = "Вы приходите к Гектору. Он вас ненавидит, но Гаса - еще больше. Вы предлагаете ему шанс отомстить... и умереть как Саламанка.";
|
||
// Здесь можно добавить проверку, согласится ли Гектор (вероятность)
|
||
bool hectorAgrees = true; // Для простоты считаем, что соглашается
|
||
if (hectorAgrees)
|
||
{
|
||
metroLabelStory.Text += "\n\nОн соглашается. План в действии. Вы устанавливаете бомбу на его кресло-каталку.";
|
||
SetupButton(metroButtonChoice1, "Привести план в исполнение (Встреча Гаса и Гектора)", 62);
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text += "\n\nГектор плюет вам в лицо (образно). Он не будет вам помогать.";
|
||
SetupButton(metroButtonChoice1, "Нужен другой план", 52);
|
||
}
|
||
break;
|
||
|
||
case 62: // Взрыв в Casa Tranquila - Гас мертв!
|
||
metroLabelStory.Text = "БА-БАХ! План сработал! Гектор и Гас погибли при взрыве. Вы... вы сделали это. Вы свободны от Гаса Фринга. Но какой ценой?";
|
||
gusIsDead = true; // Гас убит
|
||
worksForGus = false;
|
||
knowsGus = false; // Больше нет смысла его знать
|
||
gusRelationship = 0; // Сбрасываем
|
||
superLabBuilt = false; // Лаборатория, вероятно, уничтожена или недоступна
|
||
suspicion += 5; // Громкое событие
|
||
hankIsSuspicious = true; // Хэнк точно будет расследовать
|
||
money += 10000; // Возможно, нашли какие-то деньги Гаса?
|
||
SetupButton(metroButtonChoice1, "Уничтожить все улики (ноутбук Гаса и т.д.)", 63);
|
||
SetupButton(metroButtonChoice2, "Праздновать победу и планировать будущее", 64);
|
||
break;
|
||
|
||
case 63: // Уничтожение улик после смерти Гаса
|
||
metroLabelStory.Text = "Вы с Джесси и Майком (если он еще с вами) уничтожаете записи с камер и ноутбук Гаса. Это немного снижает риск, но следы все равно остаются.";
|
||
suspicion = Math.Max(0, suspicion - 2); // Снижаем подозрение
|
||
SetupButton(metroButtonChoice1, "Теперь нужно строить свою империю", 64);
|
||
SetupButton(metroButtonChoice2, "Может, теперь стоит остановиться?", STAGE_END_CAUTIOUS);
|
||
break;
|
||
|
||
case 64: // Планирование будущего после Гаса
|
||
metroLabelStory.Text = "Гас мертв. Рынок свободен. У вас есть знания, репутация (Хайзенберг!) и, возможно, команда (Джесси, Майк?). Пора строить свою собственную империю.";
|
||
SetupButton(metroButtonChoice1, "Предложить Майку партнерство", 65);
|
||
SetupButton(metroButtonChoice2, "Предложить Джесси равное партнерство", 66);
|
||
SetupButton(metroButtonChoice3, "Работать в одиночку (или только с Джесси как помощником)", 67);
|
||
// Проверка на Майка: он мог погибнуть или уйти раньше
|
||
if (!knowsMike) metroButtonChoice1.Enabled = false;
|
||
// Проверка на Джесси: он мог уйти
|
||
if (jesseIsOut || !hasJesse) metroButtonChoice2.Enabled = false;
|
||
break;
|
||
|
||
case 65: // Предложить Майку партнерство
|
||
metroLabelStory.Text = "Майк соглашается на партнерство, но на своих условиях: безопасность превыше всего, и он занимается 'грязной работой'. Он требует равную долю.";
|
||
mikeIsPartner = true;
|
||
knowsMike = true; // Убедимся, что флаг установлен
|
||
suspicion -= 1; // Майк добавляет безопасности
|
||
SetupButton(metroButtonChoice1, "Согласиться на условия Майка", 68); // К созданию нового бизнеса
|
||
SetupButton(metroButtonChoice2, "Отказаться, его доля слишком велика", 66); // Попробовать с Джесси
|
||
break;
|
||
|
||
case 66: // Предложить Джесси равное партнерство
|
||
metroLabelStory.Text = "Джесси удивлен и рад вашему предложению о равном партнерстве. Он готов работать с удвоенной силой. Но хватит ли у него дисциплины?";
|
||
// Установить флаг jesseIsPartner, если нужно отслеживать тип партнерства
|
||
hasJesse = true; // Убедимся, что флаг установлен
|
||
jesseIsOut = false; // Он снова в деле
|
||
SetupButton(metroButtonChoice1, "Начать новый бизнес с Джесси", 68); // К созданию бизнеса
|
||
SetupButton(metroButtonChoice2, "Привлечь еще и Майка (если возможно)", 65);
|
||
if (!knowsMike || mikeIsPartner) metroButtonChoice2.Enabled = false;
|
||
break;
|
||
|
||
case 67: // Работать в одиночку / Джесси-помощник
|
||
metroLabelStory.Text = "Вы решаете контролировать все сами. Возможно, Джесси будет помогать, но последнее слово всегда за вами. Это дает больше власти, но и больше рисков.";
|
||
mikeIsPartner = false;
|
||
// Установить флаг, что Джесси только помощник, если нужно
|
||
SetupButton(metroButtonChoice1, "Начать новый бизнес", 68);
|
||
break;
|
||
|
||
case 68: // Создание нового бизнеса (Vamonos Pest)
|
||
metroLabelStory.Text = "Нужно новое прикрытие и новая мобильная лаборатория. Идея Джесси: использовать фургоны компании по дезинсекции 'Vamonos Pest' для варки прямо в домах клиентов.";
|
||
usingVamonosPest = true;
|
||
hasRV = false; // Старый RV не нужен
|
||
money -= 50000; // Покупка оборудования, аренда и т.д.
|
||
suspicion += 1; // Новая активность
|
||
SetupButton(metroButtonChoice1, "Начать варить под прикрытием Vamonos Pest", 69);
|
||
SetupButton(metroButtonChoice2, "Найти другое, более надежное прикрытие (Сложнее)", 70);
|
||
break;
|
||
|
||
case 69: // Варка в Vamonos Pest
|
||
metroLabelStory.Text = $"Бизнес идет! Вы варите мет в домах, пока идет 'дезинсекция'. Качество высокое ({batchQuality}%). Проблема: где взять метиламин в нужных объемах?";
|
||
money += 150000; // Примерный доход
|
||
batchQuality = Math.Min(99, batchQuality + (mikeIsPartner ? 1 : 0)); // Майк может улучшить логистику/качество?
|
||
SetupButton(metroButtonChoice1, "Искать поставщика метиламина", 71);
|
||
SetupButton(metroButtonChoice2, "Попробовать синтезировать метиламин самому (Сложно)", 72);
|
||
SetupButton(metroButtonChoice3, "Продолжать варить понемногу, пока есть сырье", 69); // Цикл с риском нехватки
|
||
break;
|
||
|
||
case 70: // Поиск другого прикрытия
|
||
metroLabelStory.Text = "Найти надежное прикрытие сложнее, чем кажется. Все легальные бизнесы требуют внимания и вызывают вопросы при больших оборотах наличных.";
|
||
suspicion += 1;
|
||
// Добавить варианты прикрытий, если есть идеи
|
||
SetupButton(metroButtonChoice1, "Вернуться к идее Vamonos Pest", 68);
|
||
SetupButton(metroButtonChoice2, "Попытаться купить автомойку (если хватает денег)", STAGE_END_EMPIRE, cost: 100000); // Дороже теперь?
|
||
SetupButton(metroButtonChoice3, "Рискнуть и варить без прикрытия (Очень опасно)", 69, suspicionIncrease: 5); // Переход к варке, но с большим риском
|
||
break;
|
||
|
||
case 71: // Поиск метиламина (Лидия)
|
||
metroLabelStory.Text = "Майк (или Сол, если Майка нет) выходит на Лидию Родарт-Куэйл из Madrigal Electromotive. Она нервная, ненадежная, но имеет доступ к огромным запасам метиламина.";
|
||
workingWithLydia = true;
|
||
if (knowsMike) suspicion += 1; else suspicion += 2; // С Майком безопаснее
|
||
SetupButton(metroButtonChoice1, "Заключить сделку с Лидией", 73);
|
||
SetupButton(metroButtonChoice2, "Отказаться, она кажется слишком опасной/нестабильной", 74);
|
||
break;
|
||
|
||
case 72: // Синтез метиламина
|
||
metroLabelStory.Text = "Попытка синтезировать метиламин оказалась сложной и дала продукт низкого качества. Это сильно ударило по качеству конечного продукта.";
|
||
batchQuality = Math.Max(75, batchQuality - 15); // Сильное падение качества
|
||
suspicion += 2; // Нелегальный синтез
|
||
SetupButton(metroButtonChoice1, "Продолжать варить с низким качеством", 69);
|
||
SetupButton(metroButtonChoice2, "Нужно искать поставщика метиламина", 71);
|
||
break;
|
||
|
||
case 73: // Сделка с Лидией
|
||
metroLabelStory.Text = "Лидия согласна поставлять метиламин в обмен на долю прибыли и вашу защиту от Майка (если он есть), которого она боится.";
|
||
// Ухудшение отношений с Майком, если он партнер?
|
||
SetupButton(metroButtonChoice1, "Начать получать метиламин от Лидии", 75);
|
||
SetupButton(metroButtonChoice2, "Попытаться надавить на Лидию для лучших условий (Риск)", 76);
|
||
break;
|
||
|
||
case 74: // Отказ от Лидии
|
||
metroLabelStory.Text = "Вы решили не связываться с Лидией. Проблема с метиламином остается нерешенной.";
|
||
workingWithLydia = false;
|
||
SetupButton(metroButtonChoice1, "Попробовать синтезировать метиламин", 72);
|
||
SetupButton(metroButtonChoice2, "Ограбить поезд с метиламином (Безумная идея!)", 77, cost: 20000, suspicionIncrease: 6); // К ограблению поезда
|
||
SetupButton(metroButtonChoice3, "Снизить объемы производства", 69);
|
||
break;
|
||
|
||
case 75: // Работа с Лидией
|
||
metroLabelStory.Text = "Поставки метиламина налажены. Бизнес процветает. Но Лидия постоянно создает проблемы своей нервозностью и паранойей.";
|
||
money += 300000;
|
||
suspicion += 1; // Лидия привлекает внимание
|
||
SetupButton(metroButtonChoice1, "Терпеть Лидию и продолжать работать", 75); // Цикл
|
||
SetupButton(metroButtonChoice2, "Попытаться устранить Лидию (Очень рискованно!)", 78, suspicionIncrease: 5);
|
||
if (mikeIsPartner) SetupButton(metroButtonChoice3, "Позволить Майку разобраться с Лидией", 79); else metroButtonChoice3.Enabled = false;
|
||
break;
|
||
|
||
case 76: // Давление на Лидию
|
||
metroLabelStory.Text = "Ваша попытка надавить на Лидию привела к тому, что она попыталась заказать ваше убийство. Майку (или вам) пришлось вмешаться.";
|
||
suspicion += 3;
|
||
// Отношения с Лидией испорчены, возможно, она мертва?
|
||
workingWithLydia = false; // Считаем, что сделка сорвана
|
||
SetupButton(metroButtonChoice1, "Теперь точно нужен другой источник метиламина", 74);
|
||
SetupButton(metroButtonChoice2, "Она мертва. Надо замести следы.", 63); // Возврат к заметанию следов
|
||
break;
|
||
|
||
case 77: // Идея ограбления поезда
|
||
metroLabelStory.Text = "Ограбить поезд с цистерной метиламина - дерзкий, безумный и невероятно опасный план. Но если получится, вы получите огромный запас сырья.";
|
||
SetupButton(metroButtonChoice1, "Начать подготовку к ограблению", 80);
|
||
SetupButton(metroButtonChoice2, "Отказаться от идеи. Это чистое самоубийство.", 74); // Назад
|
||
break;
|
||
|
||
case 78: // Попытка устранить Лидию
|
||
// Здесь нужна логика: удалось или нет? Какие последствия?
|
||
// Пример:
|
||
bool lydiaKilled = (new Random().Next(0, 10) < 3); // 30% шанс
|
||
if (lydiaKilled)
|
||
{
|
||
metroLabelStory.Text = "Лидия устранена. Проблема решена, но ее исчезновение привлечет внимание Madrigal и полиции.";
|
||
workingWithLydia = false;
|
||
suspicion += 6;
|
||
SetupButton(metroButtonChoice1, "Заметать следы и искать новый источник", 74);
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text = "Попытка провалилась. Лидия теперь знает, что вы хотите ее убить. Она обратится к своим связям.";
|
||
suspicion += 4;
|
||
// Конфликт с Лидией обостряется, возможна война с ее наемниками
|
||
GoToStage(107); // Новая концовка/этап - война с Мадригал?
|
||
}
|
||
break;
|
||
|
||
case 79: // Майк разбирается с Лидией
|
||
metroLabelStory.Text = "Майк 'поговорил' с Лидией. Она напугана, но будет поставлять метиламин без лишних вопросов. Майк теперь полностью контролирует этот канал.";
|
||
suspicion -= 1; // Майк решил проблему
|
||
money += 300000; // Получение дохода только один раз
|
||
workingWithLydia = true; // Устанавливаем явно, что работаем с Лидией
|
||
|
||
// Вместо возврата к кейсу 75, переходим к следующему этапу или действию
|
||
SetupButton(metroButtonChoice1, "Продолжать варить в больших объемах с надежными поставками", 69);
|
||
SetupButton(metroButtonChoice2, "Обсудить с Майком дальнейшее расширение бизнеса", 80);
|
||
if (knowsGus && !gusIsDead)
|
||
{
|
||
SetupButton(metroButtonChoice3, "Обсудить с Майком ситуацию с Гасом", 50);
|
||
}
|
||
break;
|
||
|
||
|
||
case 80: // Подготовка к ограблению поезда
|
||
metroLabelStory.Text = "Подготовка идет полным ходом: изучение маршрута, покупка оборудования, привлечение людей (возможно, людей Тодда?). План сложный, риск огромный.";
|
||
money -= 30000; // Затраты
|
||
suspicion += 2;
|
||
// Добавить выбор: привлекать ли Тодда и его дядю?
|
||
SetupButton(metroButtonChoice1, "Привлечь команду Тодда Алквиста", 81, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice2, "Попытаться справиться своими силами (Уолт, Джесси, Майк)", 82);
|
||
break;
|
||
|
||
case 81: // Привлечь команду Тодда
|
||
metroLabelStory.Text = "Тодд и его дядя Джек со своей бандой соглашаются помочь. Они профессионалы, но их методы жестоки, и они могут стать проблемой в будущем.";
|
||
dealingWithJacksCrew = true;
|
||
SetupButton(metroButtonChoice1, "Провести ограбление с бандой Джека", 83);
|
||
break;
|
||
|
||
case 82: // Ограбление своими силами
|
||
metroLabelStory.Text = "Вы решаете положиться только на свою команду. Это сложнее, но вы контролируете ситуацию (по крайней мере, так кажется).";
|
||
dealingWithJacksCrew = false;
|
||
SetupButton(metroButtonChoice1, "Провести ограбление своей командой", 83);
|
||
break;
|
||
|
||
case 83: // Ограбление поезда: Проведение
|
||
metroLabelStory.Text = "Ограбление в процессе! Все идет по плану... или нет?";
|
||
// Высокая вероятность успеха, но есть шанс ЧП
|
||
bool success = (new Random().Next(0, 10) < 8); // 80% успех
|
||
bool witness = (new Random().Next(0, 10) < 3); // 30% шанс появления свидетеля (мальчик)
|
||
|
||
if (success)
|
||
{
|
||
if (witness)
|
||
{
|
||
trainHeistSuccess = -1; // Успех, но есть свидетель
|
||
metroLabelStory.Text += "\n\nОГРАБЛЕНИЕ УДАЛОСЬ! Вы получили огромный запас метиламина! Но... появился случайный свидетель - мальчик на мотоцикле.";
|
||
SetupButton(metroButtonChoice1, "Никаких свидетелей! (Тодд стреляет)", 84, suspicionIncrease: 10); // Убийство свидетеля
|
||
SetupButton(metroButtonChoice2, "Отпустить мальчика (Огромный риск!)", 85, suspicionIncrease: 5);
|
||
}
|
||
else
|
||
{
|
||
trainHeistSuccess = 1; // Чистый успех
|
||
metroLabelStory.Text += "\n\nОГРАБЛЕНИЕ УДАЛОСЬ! Вы получили огромный запас метиламина! Чистая работа.";
|
||
money += 500000; // Эквивалент стоимости метиламина
|
||
suspicion -= 1; // Успешная операция (если никто не видел)
|
||
SetupButton(metroButtonChoice1, "Теперь можно развернуть производство!", 69); // Назад к варке с сырьем
|
||
}
|
||
}
|
||
else
|
||
{
|
||
trainHeistSuccess = -2; // Провал
|
||
metroLabelStory.Text += "\n\nОГРАБЛЕНИЕ ПРОВАЛИЛОСЬ! Что-то пошло не так, полиция уже близко! Пришлось бросить все и бежать!";
|
||
suspicion += 8;
|
||
SetupButton(metroButtonChoice1, "Срочно заметать следы", 63);
|
||
SetupButton(metroButtonChoice2, "Обвинить кого-то в провале (Майка? Джесси?)", 86);
|
||
}
|
||
break;
|
||
|
||
case 84: // Тодд убивает свидетеля
|
||
metroLabelStory.Text = "Тодд без колебаний застрелил мальчика. Джесси в ужасе, Майк в ярости. Вы получили метиламин, но перешли черту, с которой нет возврата.";
|
||
suspicion += 10; // Убийство ребенка
|
||
// Сильное ухудшение отношений с Джесси и Майком
|
||
jesseIsOut = true; // Джесси, скорее всего, захочет уйти после этого
|
||
mikeIsPartner = false; // Майк тоже может уйти
|
||
SetupButton(metroButtonChoice1, "Продолжать бизнес, игнорируя произошедшее", 69); // Моральное дно
|
||
SetupButton(metroButtonChoice2, "Попытаться 'успокоить' Джесси и Майка", 87);
|
||
break;
|
||
|
||
case 85: // Отпустить свидетеля
|
||
metroLabelStory.Text = "Вы отпустили мальчика. Это гуманно, но он может рассказать полиции. Огромный риск повис над вами.";
|
||
suspicion += 5; // Риск свидетеля
|
||
hankIsSuspicious = true; // Хэнк может получить наводку
|
||
SetupButton(metroButtonChoice1, "Надеяться на лучшее и продолжать бизнес", 69);
|
||
SetupButton(metroButtonChoice2, "Попробовать найти и 'убедить' мальчика молчать (Риск)", 88, suspicionIncrease: 4);
|
||
break;
|
||
|
||
case 86: // Обвинить в провале ограбления
|
||
// Логика обвинения Майка или Джесси
|
||
// Ухудшение отношений, возможный разрыв
|
||
metroLabelStory.Text = "Вы обвиняете Майка/Джесси в провале. Это приводит к серьезному конфликту.";
|
||
suspicion += 1;
|
||
// ...
|
||
GoToStage(64); // Возврат к пересмотру партнерства?
|
||
break;
|
||
|
||
case 87: // Успокоить Джесси и Майка после убийства
|
||
metroLabelStory.Text = "Вы пытаетесь объяснить, что это была 'необходимость'. Майк молча уходит. Джесси раздавлен и хочет выйти из дела.";
|
||
jesseIsOut = true;
|
||
mikeIsPartner = false; // Майк тоже ушел
|
||
SetupButton(metroButtonChoice1, "Отпустить Джесси, работать с Тоддом/бандой Джека", 89);
|
||
SetupButton(metroButtonChoice2, "Заставить Джесси остаться силой/угрозами", 90);
|
||
break;
|
||
|
||
case 88: // Убедить мальчика молчать
|
||
// Попытка найти мальчика и запугать/подкупить его семью
|
||
// Высокий риск провала и привлечения внимания
|
||
metroLabelStory.Text = "Попытка 'убедить' свидетеля молчать провалилась и привлекла еще больше внимания полиции.";
|
||
suspicion += 6;
|
||
hankKnows = true; // Хэнк теперь точно знает
|
||
GoToStage(STAGE_GAME_OVER_CAUGHT);
|
||
break;
|
||
|
||
case 89: // Работать с бандой Джека после ухода Джесси/Майка
|
||
metroLabelStory.Text = "Джесси и Майк ушли. Вы остались с Тоддом и бандой Джека. Они выполняют работу, но их методы грубы, а лояльность сомнительна.";
|
||
dealingWithJacksCrew = true;
|
||
mikeIsPartner = false;
|
||
jesseIsOut = true;
|
||
batchQuality = Math.Max(80, batchQuality - 5); // Качество падает без Джесси/Майка
|
||
suspicion += 2; // Банда привлекает внимание
|
||
SetupButton(metroButtonChoice1, "Продолжать варить с новой 'командой'", 69); // Назад к варке
|
||
SetupButton(metroButtonChoice2, "Попытаться найти новых, более надежных партнеров", 17);
|
||
break;
|
||
|
||
case 90: // Заставить Джесси остаться
|
||
metroLabelStory.Text = "Вы угрозами заставляете Джесси остаться. Он ненавидит вас, работает из-под палки. Ваша связь окончательно разрушена.";
|
||
jesseIsOut = false; // Он остался, но...
|
||
// Сильно ухудшить отношения с Джесси
|
||
suspicion += 1;
|
||
GoToStage(69); // Назад к варке с несчастным Джесси
|
||
break;
|
||
|
||
// --- Этапы, связанные с Хэнком ---
|
||
case 91: // Хэнк находит книгу "Листья травы"
|
||
metroLabelStory.Text = "Катастрофа! Хэнк нашел книгу Гейла с вашим посвящением у вас в туалете. По выражению его лица вы понимаете: ОН ЗНАЕТ.";
|
||
hankKnows = true;
|
||
hankIsSuspicious = true; // Теперь это точность
|
||
suspicion = MAX_SUSPICION; // Максимальное подозрение от Хэнка
|
||
SetupButton(metroButtonChoice1, "Попытаться поговорить с Хэнком, убедить его?", 92);
|
||
SetupButton(metroButtonChoice2, "Немедленно бежать!", STAGE_END_FEAR);
|
||
SetupButton(metroButtonChoice3, "Устранить Хэнка (Руками банды Джека?)", 93, suspicionIncrease: 10);
|
||
if (!dealingWithJacksCrew) metroButtonChoice3.Enabled = false;
|
||
break;
|
||
|
||
case 92: // Разговор с Хэнком (Конфронтация)
|
||
metroLabelStory.Text = "Хэнк в ярости и растерянности. Он обвиняет вас во всем. Ваши оправдания бесполезны. 'Я поймаю тебя, Уолт.'";
|
||
familyLost = true; // Семья разрушена
|
||
SetupButton(metroButtonChoice1, "Просить его подумать о семье", 94);
|
||
SetupButton(metroButtonChoice2, "Угрожать Хэнку", 95, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice3, "Бежать, пока он не арестовал вас", STAGE_END_FEAR);
|
||
break;
|
||
|
||
case 93: // Заказать убийство Хэнка
|
||
metroLabelStory.Text = "Вы отдаете приказ банде Джека убрать Хэнка. Это точка невозврата. Вы чудовище.";
|
||
// Переход к событиям Ozymandias
|
||
GoToStage(96); // Этап перестрелки в пустыне
|
||
break;
|
||
|
||
case 94: // Просить Хэнка подумать о семье
|
||
metroLabelStory.Text = "Хэнк колеблется на мгновение, но его долг офицера DEA перевешивает. 'Семья? Ты разрушил эту семью, Уолт!' Он намерен вас арестовать.";
|
||
SetupButton(metroButtonChoice1, "Сдаться Хэнку", STAGE_GAME_OVER_CAUGHT);
|
||
SetupButton(metroButtonChoice2, "Бежать", STAGE_END_FEAR);
|
||
SetupButton(metroButtonChoice3, "Позвонить банде Джека (Последний шанс?)", 93);
|
||
if (!dealingWithJacksCrew) metroButtonChoice3.Enabled = false;
|
||
break;
|
||
|
||
case 95: // Угрожать Хэнку
|
||
metroLabelStory.Text = "Ваши угрозы только укрепляют решимость Хэнка. Он видит, каким монстром вы стали. Он записывает ваш разговор.";
|
||
suspicion = MAX_SUSPICION; // Хуже уже некуда
|
||
SetupButton(metroButtonChoice1, "Сдаться", STAGE_GAME_OVER_CAUGHT);
|
||
SetupButton(metroButtonChoice2, "Бежать", STAGE_END_FEAR);
|
||
break;
|
||
|
||
case 96: // Перестрелка в пустыне (Ozymandias)
|
||
metroLabelStory.Text = "Банда Джека приехала на место ареста Хэнка. Начинается жестокая перестрелка. Хэнк и Гомез убиты. Джек забирает ваши деньги и уезжает, оставив вас ни с чем в пустыне.";
|
||
hankKnows = true; // Хэнк мертв
|
||
hankIsSuspicious = false; // Мертвые не подозревают
|
||
money = 10000; // Осталось немного
|
||
suspicion = MAX_SUSPICION; // Все знают
|
||
familyLost = true;
|
||
jesseIsOut = true; // Джесси схвачен бандой Джека
|
||
dealingWithJacksCrew = false; // Они вас предали
|
||
SetupButton(metroButtonChoice1, "Вернуться домой к руинам своей жизни", 97);
|
||
SetupButton(metroButtonChoice2, "Позвонить Солу и заказать исчезновение", 106, cost: 100000); // Нужно больше денег!
|
||
metroButtonChoice2.Enabled = (money >= 100000); // Проверка денег
|
||
break;
|
||
|
||
case 97: // Возвращение домой после Ozymandias
|
||
metroLabelStory.Text = "Дом пуст. Скайлер и дети ушли, забрав остатки денег. Вы остались одни. Все потеряно.";
|
||
familyLost = true;
|
||
SetupButton(metroButtonChoice1, "Заказать исчезновение на последние деньги", 106, cost: 10000);
|
||
SetupButton(metroButtonChoice2, "Ждать ареста", STAGE_GAME_OVER_CAUGHT);
|
||
break;
|
||
|
||
|
||
// --- Этапы Исчезновения и Финала ---
|
||
|
||
case 98: // Жизнь в Нью-Гэмпшире
|
||
metroLabelStory.Text = "Вы живете в хижине в заснеженной глуши Нью-Гэмпшира под новым именем. Одиночество, тоска и рак съедают вас. Вы смотрите новости и видите, как рушится все, что вы создали.";
|
||
waltIsDisappeared = true;
|
||
money -= 1000; // Траты на жизнь
|
||
SetupButton(metroButtonChoice1, "Продолжать скрываться", 98); // Цикл угасания
|
||
SetupButton(metroButtonChoice2, "Связаться с сыном (Риск)", 99);
|
||
SetupButton(metroButtonChoice3, "Вернуться в Альбукерке для финального акта", 100); // К финалу!
|
||
break;
|
||
|
||
case 99: // Связаться с сыном
|
||
metroLabelStory.Text = "Вы звоните Уолту-младшему. Он в ярости и горе. 'Почему ты еще не умер?!' Он не хочет ваших денег, он вас ненавидит. Связь оборвана.";
|
||
familyLost = true; // Окончательно
|
||
GoToStage(98); // Назад к унынию
|
||
break;
|
||
|
||
case 100: // Возвращение в Альбукерке (Финал)
|
||
metroLabelStory.Text = "Вы вернулись. Рак прогрессирует, времени мало. Нужно завершить дела: обеспечить семью, разобраться с Лидией и бандой Джека, спасти Джесси.";
|
||
waltIsDisappeared = false; // Вы больше не скрываетесь
|
||
suspicion = MAX_SUSPICION;
|
||
SetupButton(metroButtonChoice1, "Передать деньги семье через Гретхен и Эллиотта", 101);
|
||
SetupButton(metroButtonChoice2, "Разобраться с Лидией (Рицин)", 102);
|
||
SetupButton(metroButtonChoice3, "Отправиться на встречу с бандой Джека", 103);
|
||
break;
|
||
|
||
case 101: // Передача денег семье
|
||
metroLabelStory.Text = "Вы хитростью заставляете Гретхен и Эллиотта передать оставшиеся деньги вашему сыну под видом благотворительности. Семья будет обеспечена. Одна задача выполнена.";
|
||
money = 0; // Деньги переданы
|
||
SetupButton(metroButtonChoice1, "Разобраться с Лидией", 102);
|
||
SetupButton(metroButtonChoice2, "Отправиться на встречу с бандой Джека", 103);
|
||
break;
|
||
|
||
case 102: // Разобраться с Лидией (Финал)
|
||
metroLabelStory.Text = "Вы встречаетесь с Лидией и Тоддом под предлогом новой формулы. Вы незаметно подменяете стевию Лидии на рицин.";
|
||
workingWithLydia = false; // Она обречена
|
||
SetupButton(metroButtonChoice1, "Задача выполнена. Теперь к банде Джека.", 103);
|
||
SetupButton(metroButtonChoice2, "Сообщить Лидии о рицине по телефону (Злорадство)", 104);
|
||
break;
|
||
|
||
case 103: // Встреча с бандой Джека (Финал)
|
||
metroLabelStory.Text = "Вы приезжаете на базу банды Джека. Они приводят Джесси - он их раб. Вы привезли 'подарок' - автоматическую турель в багажнике.";
|
||
SetupButton(metroButtonChoice1, "Активировать турель!", 105); // Финальная сцена
|
||
break;
|
||
|
||
case 104: // Звонок Лидии
|
||
metroLabelStory.Text = "Вы звоните Лидии и сообщаете, что отравили ее рицином. 'Прощайте, Лидия.' Это было мелочно, но доставило вам мрачное удовлетворение.";
|
||
GoToStage(103); // Все равно к Джеку
|
||
break;
|
||
|
||
case 105: // Финальная бойня и смерть
|
||
metroLabelStory.Text = "Турель срабатывает, убивая банду Джека. Вы получаете ранение. Вы освобождаете Джесси, убиваете Джека. Джесси уезжает. Вы остаетесь в лаборатории, где все началось и закончилось. Вы умираете с улыбкой.";
|
||
// КОНЕЦ ИГРЫ - ПОБЕДА? (Каноничная концовка)
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
// Можно добавить новую концовку STAGE_END_CANON = 108
|
||
break;
|
||
|
||
case 109: // Скайлер начинает подозревать
|
||
metroLabelStory.Text = "Скайлер замечает ваше странное поведение, необъяснимые доходы и ложь. Она начинает задавать неудобные вопросы. 'Уолт, что происходит?'";
|
||
skylerInvolvement = 1; // Подозревает
|
||
suspicion += 1; // Семейное напряжение = риск
|
||
SetupButton(metroButtonChoice1, "Продолжать лгать, придумывая новые истории", 110, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice2, "Рассказать ей часть правды (о варке, но не об опасностях)", 111);
|
||
SetupButton(metroButtonChoice3, "Попытаться откупиться дорогим подарком", 112, cost: 10000);
|
||
break;
|
||
|
||
case 110: // Продолжать лгать Скайлер
|
||
metroLabelStory.Text = "Ваша ложь становится все более запутанной. Скайлер вам больше не верит, дистанция между вами растет. Она может начать собственное расследование.";
|
||
skylerInvolvement = 1; // Все еще подозревает, но теперь не доверяет
|
||
suspicion += 1;
|
||
// Вернуться к основному циклу бизнеса или другой проблеме
|
||
GoToStage(69); // Пример: возврат к варке
|
||
break;
|
||
|
||
case 111: // Рассказать часть правды Скайлер
|
||
metroLabelStory.Text = "Вы признаетесь в варке метамфетамина, но преуменьшаете риски. Скайлер в шоке и ужасе. 'Ты... ты монстр?' Она требует прекратить.";
|
||
skylerInvolvement = 2; // Знает частично
|
||
familyLost = true; // Начало конца семьи
|
||
suspicion += 2;
|
||
SetupButton(metroButtonChoice1, "Пообещать прекратить (но не собираться)", 113);
|
||
SetupButton(metroButtonChoice2, "Убедить ее, что это ради семьи", 114);
|
||
SetupButton(metroButtonChoice3, "Сказать ей держаться подальше от ваших дел", 115);
|
||
break;
|
||
|
||
case 112: // Откупиться от Скайлер
|
||
metroLabelStory.Text = "Дорогой подарок временно отвлек Скайлер, но не решил проблему. Ее подозрения остались, и теперь она еще и считает вас расточительным.";
|
||
suspicion += 1;
|
||
GoToStage(69); // Пример: возврат к варке
|
||
break;
|
||
|
||
case 113: // Пообещать Скайлер прекратить
|
||
metroLabelStory.Text = "Вы обещаете Скайлер завязать. Она настроена скептически, но готова дать вам шанс... пока. Но как только она узнает, что вы солгали, доверие будет разрушено навсегда.";
|
||
// Не меняем skylerInvolvement, но это временная мера
|
||
GoToStage(69); // Возврат к делам
|
||
break;
|
||
|
||
case 114: // Убедить Скайлер (ради семьи)
|
||
metroLabelStory.Text = "Вы давите на чувство вины и страх за будущее. Скайлер колеблется. Возможно, она смирится... или даже поможет?";
|
||
if (new Random().Next(0, 10) < 4) // 40% шанс, что она начнет помогать
|
||
{
|
||
metroLabelStory.Text += "\n\nС тяжелым сердцем Скайлер предлагает помочь с отмыванием денег через автомойку.";
|
||
GoToStage(116); // К покупке автомойки
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text += "\n\nНет, она не может принять это. Она требует прекратить.";
|
||
skylerInvolvement = 4; // Враждебна
|
||
familyLost = true;
|
||
GoToStage(115); // К конфликту
|
||
}
|
||
break;
|
||
|
||
case 115: // Конфликт со Скайлер
|
||
metroLabelStory.Text = "Скайлер в ярости. Она угрожает рассказать Хэнку или уйти с детьми. Ваша семейная жизнь рушится.";
|
||
skylerInvolvement = 4;
|
||
familyLost = true;
|
||
suspicion += 3; // Конфликт может привести к утечке информации
|
||
SetupButton(metroButtonChoice1, "Игнорировать ее угрозы", 69); // Рискованно
|
||
SetupButton(metroButtonChoice2, "Попытаться отправить ее 'в отпуск'", 117, cost: 5000); // Убрать ее на время
|
||
SetupButton(metroButtonChoice3, "Пригрозить ей в ответ", 118, suspicionIncrease: 2); // Опасно
|
||
break;
|
||
|
||
case 116: // Покупка/Использование автомойки
|
||
metroLabelStory.Text = "Вы покупаете автомойку 'A1A'. Скайлер берет на себя управление и начинает отмывать ваши грязные деньги. Это эффективно, но она все глубже увязает в вашем криминальном мире.";
|
||
carWashOwned = true;
|
||
skylerInvolvement = 3; // Участвует
|
||
money -= 80000; // Стоимость мойки
|
||
suspicion -= 1; // Легальное прикрытие помогает
|
||
SetupButton(metroButtonChoice1, "Продолжать поставлять Скайлер деньги для отмывки", 69); // Назад к варке
|
||
SetupButton(metroButtonChoice2, "Обсудить со Скайлер расширение 'бизнеса'", 119); // Планы?
|
||
break;
|
||
|
||
case 117: // Отправить Скайлер "в отпуск"
|
||
metroLabelStory.Text = "Вы отправляете Скайлер и детей подальше под предлогом отпуска. Это дает вам временную передышку, но проблема не решена, и это стоило денег.";
|
||
suspicion -= 1; // Временно нет конфликта дома
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 118: // Угрожать Скайлер
|
||
metroLabelStory.Text = "Ваши угрозы пугают Скайлер до смерти. Она замолкает, но теперь боится вас и ищет способ сбежать или защитить себя. 'Я не боюсь тебя, Уолт. Я боюсь ЗА тебя.'";
|
||
skylerInvolvement = 4;
|
||
familyLost = true;
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 119: // Скайлер и расширение бизнеса
|
||
metroLabelStory.Text = "Скайлер, погрузившись в отмывание денег, начинает проявлять деловую хватку. Она предлагает стратегии для увеличения 'легального' дохода автомойки, чтобы отмывать больше.";
|
||
skylerInvolvement = 3;
|
||
SetupButton(metroButtonChoice1, "Прислушаться к ее советам", 120);
|
||
SetupButton(metroButtonChoice2, "Сказать ей не лезть не в свое дело", 115); // Назад к конфликту
|
||
break;
|
||
|
||
case 120: // Следовать советам Скайлер
|
||
metroLabelStory.Text = "Вы следуете советам Скайлер. Автомойка действительно начинает приносить больше легального дохода, позволяя отмывать большие суммы.";
|
||
money += 10000; // Доп. доход от мойки
|
||
suspicion -= 1; // Более эффективное отмывание
|
||
GoToStage(69);
|
||
break;
|
||
|
||
|
||
// --- Хэнк и Расследование ---
|
||
case 121: // Хэнк задает вопросы
|
||
metroLabelStory.Text = $"Хэнк, расследуя дела 'синего мета', упоминает некоторые детали, которые кажутся вам подозрительно знакомыми. Он спрашивает ваше мнение как химика.";
|
||
hankInvestigationProgress += 1;
|
||
suspicion += 1;
|
||
SetupButton(metroButtonChoice1, "Дать ему ложный след или бесполезный совет", 122, suspicionIncrease: 1);
|
||
SetupButton(metroButtonChoice2, "Сделать вид, что ничего не понимаете в уличной химии", 123);
|
||
SetupButton(metroButtonChoice3, "Попытаться аккуратно выяснить, что он знает", 124, suspicionIncrease: 2);
|
||
break;
|
||
|
||
case 122: // Дать Хэнку ложный след
|
||
metroLabelStory.Text = "Вы пытаетесь направить Хэнка по ложному следу. Он благодарит за помощь, но неизвестно, поверил ли он вам или это только усилит его подозрения, если он поймет обман.";
|
||
hankInvestigationProgress += 1; // Он продолжает расследование
|
||
GoToStage(69); // Возврат к делам
|
||
break;
|
||
|
||
case 123: // Притвориться незнающим
|
||
metroLabelStory.Text = "Вы говорите Хэнку, что вы 'школьный учитель, а не нарколаборант'. Он отшучивается, но мог заметить вашу нервозность.";
|
||
// Не увеличиваем прогресс, но и не уменьшаем
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 124: // Выяснить, что знает Хэнк
|
||
metroLabelStory.Text = "Вы пытаетесь выудить у Хэнка информацию. Вам удается узнать некоторые детали расследования, но ваше любопытство кажется ему подозрительным.";
|
||
hankInvestigationProgress += 2; // Вы знаете больше, но и он подозревает больше
|
||
suspicion += 2;
|
||
SetupButton(metroButtonChoice1, "Использовать полученную информацию для большей осторожности", 69);
|
||
SetupButton(metroButtonChoice2, "Попытаться подставить кого-то другого, используя информацию", 125, suspicionIncrease: 3); // Рискованно
|
||
break;
|
||
|
||
case 125: // Попытка подставы
|
||
metroLabelStory.Text = "Ваша попытка подставить другого дилера/химика провалилась или имела непредвиденные последствия. Хэнк стал еще подозрительнее.";
|
||
suspicion += 4;
|
||
hankInvestigationProgress += 1;
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 126: // Хэнк близко! (Событие)
|
||
// Этот этап может запускаться случайно или при высоком hankInvestigationProgress
|
||
metroLabelStory.Text = "Хэнк почти вышел на вас! Возможно, он следит за вашими партнерами или нашел важную улику (например, маску из лаборатории). Нужно срочно действовать!";
|
||
hankInvestigationProgress = Math.Max(7, hankInvestigationProgress); // Он очень близок
|
||
suspicion = Math.Max(6, suspicion); // Подозрение высокое
|
||
SetupButton(metroButtonChoice1, "Немедленно приостановить всю деятельность", 127, suspicionIncrease: -2); // Залечь на дно
|
||
SetupButton(metroButtonChoice2, "Попытаться уничтожить улики, которые он мог найти", 128, cost: 5000, suspicionIncrease: 3); // Рискованно
|
||
SetupButton(metroButtonChoice3, "Попробовать отвлечь Хэнка (инсценировать угрозу ему?)", 129, cost: 10000, suspicionIncrease: 4); // Очень рискованно
|
||
break;
|
||
|
||
case 127: // Приостановка деятельности
|
||
metroLabelStory.Text = "Вы заморозили все операции. Это снижает риск, но останавливает поток денег и вызывает вопросы у партнеров (Лидии, Майка).";
|
||
// Пропуск нескольких циклов дохода?
|
||
GoToStage(69); // Вернуться позже, когда станет безопаснее?
|
||
break;
|
||
|
||
case 128: // Уничтожение улик
|
||
metroLabelStory.Text = "Вы пытаетесь уничтожить улики, но это похоже на попытку замести следы цунами веником. Возможно, вы только оставили больше отпечатков.";
|
||
suspicion += 3;
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 129: // Отвлечь Хэнка
|
||
metroLabelStory.Text = "Ваша попытка отвлечь Хэнка (например, ложной угрозой) имела обратный эффект. Он удвоил усилия, чувствуя, что кто-то пытается ему помешать.";
|
||
suspicion += 4;
|
||
hankInvestigationProgress += 2;
|
||
GoToStage(69);
|
||
break;
|
||
|
||
// --- Джесси: Травма и Попытки Уйти ---
|
||
case 130: // Джесси подавлен (после Гейла/Мальчика)
|
||
metroLabelStory.Text = "Джесси глубоко травмирован событиями (убийство Гейла, мальчика). Он снова начал употреблять, работа стоит, он становится обузой и риском.";
|
||
jesseMentalState = -2; // Сильно подавлен
|
||
batchQuality = Math.Max(80, batchQuality - 3); // Качество страдает
|
||
suspicion += 2; // Ненадежный партнер
|
||
SetupButton(metroButtonChoice1, "Попытаться поговорить с ним, поддержать", 131);
|
||
SetupButton(metroButtonChoice2, "Отправить его на реабилитацию (если есть деньги)", 132, cost: 30000);
|
||
SetupButton(metroButtonChoice3, "Угрозами заставить его работать", 90); // Назад к принуждению
|
||
SetupButton(metroButtonChoice3, "Предложить ему 'отпуск' / выход из дела", 133);
|
||
break;
|
||
|
||
case 131: // Поддержать Джесси
|
||
metroLabelStory.Text = "Вы пытаетесь поговорить с Джесси, но ваши слова звучат фальшиво. Вы сами причина его страданий. Это не помогает.";
|
||
jesseMentalState = -2;
|
||
GoToStage(130); // Возврат к проблеме
|
||
break;
|
||
|
||
case 132: // Джесси в реабилитации
|
||
metroLabelStory.Text = "Джесси проходит курс реабилитации. Это дорого, и вы временно остались без партнера (если он был им). Неизвестно, поможет ли это ему надолго.";
|
||
hasJesse = false; // Временно недоступен
|
||
jesseMentalState = -1; // Чуть лучше, но не норма
|
||
GoToStage(69); // Продолжать бизнес без него
|
||
break;
|
||
|
||
case 133: // Предложить Джесси уйти
|
||
metroLabelStory.Text = "Вы предлагаете Джесси уйти, возможно, даже с долей денег. Он смотрит на вас с недоверием и болью.";
|
||
SetupButton(metroButtonChoice1, "Дать ему денег и отпустить", 134, cost: 100000); // Щедрый выход
|
||
SetupButton(metroButtonChoice2, "Отпустить его без денег", 135); // Жесткий выход
|
||
SetupButton(metroButtonChoice3, "Передумать, он слишком много знает", 90); // Заставить остаться
|
||
break;
|
||
|
||
case 134: // Джесси уходит с деньгами
|
||
metroLabelStory.Text = "Джесси берет деньги и исчезает. Вы остались без партнера, но, возможно, спасли его. Или он вернется мстить?";
|
||
jesseIsOut = true;
|
||
hasJesse = false;
|
||
GoToStage(89); // Работать с теми, кто остался
|
||
break;
|
||
|
||
case 135: // Джесси уходит без денег
|
||
metroLabelStory.Text = "Джесси уходит, разбитый и без гроша. Он может пойти в полицию или просто сгинуть. Вы поступили жестоко.";
|
||
jesseIsOut = true;
|
||
hasJesse = false;
|
||
suspicion += 1; // Отчаявшийся человек опасен
|
||
GoToStage(89);
|
||
break;
|
||
|
||
case 136: // Джесси пытается помочь Андреа (Риск)
|
||
// Этот этап может случиться, если Джесси не ушел
|
||
metroLabelStory.Text = "Джесси пытается помочь Андреа и Броку, используя 'грязные' деньги. Это привлекает ненужное внимание к вам обоим.";
|
||
andreaKnows = true; // Она и Брок в опасности
|
||
suspicion += 3;
|
||
SetupButton(metroButtonChoice1, "Запретить Джесси это делать", 137);
|
||
SetupButton(metroButtonChoice2, "Помочь ему сделать это незаметно (Риск)", 138, cost: 5000, suspicionIncrease: 1);
|
||
break;
|
||
|
||
case 137: // Запретить Джесси помогать Андреа
|
||
metroLabelStory.Text = "Вы запрещаете Джесси использовать деньги. Он в ярости. 'Эти деньги прокляты! Я хочу сделать хоть что-то хорошее!' Конфликт обостряется.";
|
||
jesseMentalState -= 1;
|
||
GoToStage(130); // Назад к проблемам с Джесси
|
||
break;
|
||
|
||
case 138: // Помочь Джесси с Андреа
|
||
metroLabelStory.Text = "Вы помогаете Джесси передать деньги Андреа анонимно. Это немного успокаивает его совесть, но риск остается.";
|
||
jesseMentalState += 1;
|
||
GoToStage(69); // Назад к делам
|
||
break;
|
||
|
||
// --- Случайные События и Проблемы ---
|
||
case 139: // Поломка Оборудования (Событие)
|
||
metroLabelStory.Text = "Критически важная часть оборудования (фильтр, насос) сломалась прямо во время варки! Нужно срочно чинить или заменять, иначе вся партия будет испорчена.";
|
||
suspicion += 1; // Задержка = риск
|
||
SetupButton(metroButtonChoice1, "Попытаться починить подручными средствами (Риск для качества)", 140);
|
||
SetupButton(metroButtonChoice2, "Срочно купить замену (Дорого и подозрительно)", 141, cost: 15000, suspicionIncrease: 2);
|
||
SetupButton(metroButtonChoice3, "Прервать варку, потерять партию", 142);
|
||
break;
|
||
|
||
case 140: // Починка подручными средствами
|
||
metroLabelStory.Text = "Вам удалось кое-как починить оборудование, но качество партии неизбежно пострадает.";
|
||
batchQuality = Math.Max(70, batchQuality - 10);
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 141: // Срочная покупка замены
|
||
metroLabelStory.Text = "Вы нашли и купили замену, но срочная покупка специфического оборудования могла привлечь внимание.";
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 142: // Потеря партии
|
||
metroLabelStory.Text = "Вы были вынуждены прервать варку и уничтожить почти готовую партию. Это серьезная финансовая потеря.";
|
||
// Уменьшить деньги или пропустить цикл дохода
|
||
GoToStage(69);
|
||
break;
|
||
|
||
case 143: // Нехватка Сырья (Событие)
|
||
metroLabelStory.Text = "Возникли проблемы с поставками (Лидия нервничает, Майк занят, старые запасы кончились). Производство под угрозой остановки.";
|
||
suspicion += 1;
|
||
SetupButton(metroButtonChoice1, "Надавить на Лидию/Майка", 76); // Может привести к конфликту
|
||
SetupButton(metroButtonChoice2, "Искать альтернативных поставщиков (Риск)", 17);
|
||
SetupButton(metroButtonChoice3, "Приостановить производство", 127);
|
||
break;
|
||
|
||
case 144: // Неожиданный Визит (Событие)
|
||
metroLabelStory.Text = "Во время варки в доме (Vamonos Pest) неожиданно вернулись хозяева / приехала полиция по другому вызову / зашел любопытный сосед! Нужно срочно прятать все!";
|
||
suspicion += 4; // Высокий риск обнаружения
|
||
bool discovered = (new Random().Next(0, 10) < 3); // 30% шанс быть обнаруженным
|
||
if (discovered)
|
||
{
|
||
metroLabelStory.Text += "\n\nСЛИШКОМ ПОЗДНО! Вас заметили!";
|
||
GoToStage(STAGE_GAME_OVER_CAUGHT_COOKING);
|
||
}
|
||
else
|
||
{
|
||
metroLabelStory.Text += "\n\nФух, пронесло! Вам удалось спрятаться или отвлечь внимание. Но это было на грани.";
|
||
GoToStage(69);
|
||
}
|
||
break;
|
||
|
||
|
||
// --- Альтернативные пути и Концовки ---
|
||
case 145: // Что если Гас Выжил? (Альтернативный путь)
|
||
// Сюда можно попасть, если покушение в Casa Tranquila провалилось
|
||
metroLabelStory.Text = "Покушение провалилось, Гас выжил, но, возможно, ранен или ослаблен. Он знает, что вы стоите за этим. Теперь он будет мстить с удвоенной силой.";
|
||
gusIsDead = false;
|
||
gusRelationship = -15; // Крайняя враждебность
|
||
suspicion += 5;
|
||
SetupButton(metroButtonChoice1, "Бежать немедленно!", 106); // Исчезновение
|
||
SetupButton(metroButtonChoice2, "Попробовать нанести второй удар, пока он слаб", 52); // Снова планировать
|
||
SetupButton(metroButtonChoice3, "Сдаться полиции, чтобы он вас не достал", STAGE_GAME_OVER_CAUGHT);
|
||
break;
|
||
|
||
case 146: // Что если Майк отказался от партнерства?
|
||
// Сюда можно попасть из этапа 65
|
||
metroLabelStory.Text = "Майк отказался от вашего предложения. Он предпочитает работать один или считает вас слишком рискованным. Вы остались без его защиты и опыта.";
|
||
mikeIsPartner = false;
|
||
suspicion += 1; // Меньше безопасности
|
||
GoToStage(66); // Предложить партнерство Джесси?
|
||
break;
|
||
|
||
case 147: // Финал: Сделка с DEA (Альтернативная концовка)
|
||
// Сюда можно попасть на поздних этапах, особенно если Хэнк жив/знает
|
||
metroLabelStory.Text = "Загнанный в угол, вы решаете пойти на сделку с DEA. Вы сдаете всех: Лидию, банду Джека (если они живы), раскрываете все схемы. В обмен получаете смягчение приговора и программу защиты свидетелей.";
|
||
// КОНЕЦ ИГРЫ - ПРЕДАТЕЛЬСТВО
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 148: // Финал: Уолт в тюрьме (Альтернативная концовка)
|
||
// Сюда можно попасть, если сдаться или быть пойманным не Хэнком
|
||
metroLabelStory.Text = "Вас арестовали. Суд был громким. Вы получили пожизненный срок. Рак убьет вас в тюрьме, вдали от семьи, всеми презираемого.";
|
||
// КОНЕЦ ИГРЫ - ЗАКЛЮЧЕНИЕ
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 149: // Финал: Джесси убивает Уолта (Альтернативная концовка)
|
||
// Сюда можно попасть на финальных этапах, если Джесси жив и зол
|
||
metroLabelStory.Text = "В финальной конфронтации Джесси, доведенный до предела вашими манипуляциями и страданиями, которые вы ему причинили, убивает вас. Его месть свершилась.";
|
||
// КОНЕЦ ИГРЫ - МЕСТЬ ДЖЕССИ
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 150: // Финал: "Империя" Уолта (Альтернативная концовка - Успех?)
|
||
// Сюда можно попасть, если удалось устранить всех врагов, отмыть деньги и не попасться
|
||
metroLabelStory.Text = "Вы достигли вершины. Вы Хайзенберг, неоспоримый король метамфетаминовой империи. У вас миллиарды. Но вы потеряли семью, душу и не можете спать спокойно. Стоило ли оно того?";
|
||
// КОНЕЦ ИГРЫ - ТЕМНАЯ ПОБЕДА
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
|
||
// --- СТАНДАРТНЫЕ КОНЦОВКИ (100+) ---
|
||
case STAGE_GAME_OVER_CAUGHT: // Проигрыш: Поймали (Общий)
|
||
metroLabelStory.Text = "GAME OVER\n\nСлишком много подозрительных действий привлекли внимание DEA. Агент Шрейдер лично надевает на вас наручники. 'Уолтер? Не могу поверить...' Путь окончен в тюремной камере.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case STAGE_GAME_OVER_CAUGHT_COOKING: // Проигрыш: Поймали при варке в промзоне
|
||
metroLabelStory.Text = "GAME OVER\n\nПатруль заметил дым из заброшенного здания. Вас и вашу лабораторию накрыли с поличным. Это конец.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case STAGE_END_CAUTIOUS: // Концовка: Осторожный Уолт
|
||
metroLabelStory.Text = "КОНЕЦ ИГРЫ (Осторожный)\n\nВы решаете остановиться. Заработанных денег мало, проблемы остались, но вы хотя бы не в тюрьме и не мертвы... пока. Вы возвращаетесь к своей прежней жизни, но тень опасного опыта навсегда останется с вами.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case STAGE_END_EMPIRE: // Концовка: Надежда? / Начало Империи
|
||
metroLabelStory.Text = "КОНЕЦ ИГРЫ (Начало 'Империи'?)\n\nЗаработав немного денег, вы покупаете автомойку. Возможно, это шанс легализовать будущие доходы? Или просто способ вернуться к нормальной жизни? Путь только начинается...";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case STAGE_END_FEAR: // Концовка: Страх / В бегах
|
||
metroLabelStory.Text = "КОНЕЦ ИГРЫ (В бегах?)\n\nВаши враги (Картель, Гас, полиция?) слишком близко. Вы уничтожаете улики и пытаетесь исчезнуть. Денег почти нет, вы оглядываетесь на каждую тень. Это не жизнь, а выживание.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 205: // Пример новой концовки - Провал Мести
|
||
metroLabelStory.Text = "GAME OVER\n\nВаша попытка отомстить Туко (или кому-то еще) закончилась катастрофой. Вы либо мертвы, либо арестованы. Месть - блюдо, которое лучше не пробовать.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 106: // Новая концовка - Исчезновение через Сола/Эда
|
||
metroLabelStory.Text = "КОНЕЦ ИГРЫ (Новая жизнь?)\n\nСол (или его знакомый 'специалист по исчезновениям') организовал вам новые документы и переезд в глухомань. Вы Уолтер Уайт? Нет, вы теперь никто. Но вы живы.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 107: // Новая концовка - Война с Мадригал
|
||
metroLabelStory.Text = "GAME OVER\n\nПопытка устранить Лидию провалилась. Она использовала ресурсы Madrigal и наняла профессионалов. Вас выследили и устранили. Связываться с корпорациями опаснее, чем с картелем.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
case 108: // Концовка - Канон (Felina)
|
||
metroLabelStory.Text = "КОНЕЦ ИГРЫ (Felina)\n\nВы умираете в лаборатории, достигнув своих целей: семья обеспечена, враги мертвы, Джесси свободен. Вы были Хайзенбергом.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
|
||
// --- Ошибка ---
|
||
default:
|
||
metroLabelStory.Text = $"Ошибка: Неизвестный этап игры ({stage}).";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
break;
|
||
}
|
||
|
||
// Обновляем UI после обработки логики этапа
|
||
UpdateUI();
|
||
|
||
if (devConsole != null && devConsole.Visible)
|
||
{
|
||
devConsole.UpdateValues();
|
||
}
|
||
|
||
// Проверяем условия конца только если это не этап конца игры (stage < 100)
|
||
// и не этап, который сам по себе является концом (например, переход к STAGE_END_FEAR)
|
||
if (currentStage < STAGE_GAME_OVER_CAUGHT)
|
||
{
|
||
// Дополнительная проверка на отрицательный баланс или макс. подозрение
|
||
CheckEndConditions();
|
||
}
|
||
}
|
||
|
||
private void UpdateUI()
|
||
{
|
||
// Обновление текстовых меток
|
||
metroLabelMoney.Text = $"Деньги: ${money}";
|
||
metroLabelSuspicion.Text = $"Подозрение: {suspicion} / {MAX_SUSPICION}";
|
||
|
||
// Обновление цвета подозрения
|
||
UpdateSuspicionUI();
|
||
|
||
// Обновление цвета денег
|
||
UpdateMoneyUI();
|
||
}
|
||
|
||
private void UpdateSuspicionUI()
|
||
{
|
||
if (suspicion > MAX_SUSPICION * 0.7)
|
||
{
|
||
metroLabelSuspicion.ForeColor = Color.Red;
|
||
metroLabelSuspicion.Style = MetroColorStyle.Red;
|
||
metroToolTip1.SetToolTip(metroLabelSuspicion, "КРИТИЧЕСКОЕ подозрение! Будьте осторожны!");
|
||
}
|
||
else if (suspicion > MAX_SUSPICION * 0.4)
|
||
{
|
||
metroLabelSuspicion.ForeColor = Color.Orange;
|
||
metroLabelSuspicion.Style = MetroColorStyle.Orange;
|
||
metroToolTip1.SetToolTip(metroLabelSuspicion, "Высокий уровень подозрения");
|
||
}
|
||
else
|
||
{
|
||
metroLabelSuspicion.ForeColor = Color.Yellow;
|
||
metroLabelSuspicion.Style = MetroColorStyle.Yellow;
|
||
metroToolTip1.SetToolTip(metroLabelSuspicion, "Уровень подозрения со стороны закона");
|
||
}
|
||
metroLabelSuspicion.StyleManager = this.StyleManager;
|
||
}
|
||
|
||
private void UpdateMoneyUI()
|
||
{
|
||
if (money < 1000)
|
||
{
|
||
metroLabelMoney.ForeColor = Color.Salmon;
|
||
metroLabelMoney.Style = MetroColorStyle.Red;
|
||
metroToolTip1.SetToolTip(metroLabelMoney, "Деньги на исходе!");
|
||
}
|
||
else
|
||
{
|
||
metroLabelMoney.ForeColor = Color.LightGreen;
|
||
metroLabelMoney.Style = MetroColorStyle.Green;
|
||
metroToolTip1.SetToolTip(metroLabelMoney, "Ваши текущие средства");
|
||
}
|
||
metroLabelMoney.StyleManager = this.StyleManager;
|
||
}
|
||
|
||
private void CheckEndConditions()
|
||
{
|
||
// Проверка на слишком высокий уровень подозрения
|
||
if (suspicion >= MAX_SUSPICION)
|
||
{
|
||
GoToStage(STAGE_GAME_OVER_CAUGHT);
|
||
return;
|
||
}
|
||
|
||
// Проверка на отрицательный баланс
|
||
if (money < 0)
|
||
{
|
||
metroLabelStory.Text = "GAME OVER\n\nУ вас закончились деньги. Долги и проблемы со здоровьем вас доконали. Игра окончена.";
|
||
DisableAllButtons();
|
||
SetupButton(metroButtonChoice1, "Начать заново?", 0);
|
||
metroButtonChoice1.Enabled = true;
|
||
return;
|
||
}
|
||
}
|
||
|
||
private void SetupButton(MetroButton button, string text, int targetStage, int cost = 0, int suspicionIncrease = 0)
|
||
{
|
||
// Если есть стоимость, добавляем к тексту
|
||
string buttonText = text + (cost > 0 ? $" (${cost})" : "");
|
||
|
||
button.Text = buttonText;
|
||
button.Tag = new ButtonData { TargetStage = targetStage, Cost = cost, SuspicionIncrease = suspicionIncrease };
|
||
button.Visible = true;
|
||
|
||
// Кнопка неактивна, если не хватает денег
|
||
button.Enabled = (money >= cost);
|
||
|
||
// Устанавливаем подсказку о стоимости
|
||
if (cost > 0)
|
||
{
|
||
metroToolTip1.SetToolTip(button, $"Требуется ${cost}");
|
||
}
|
||
else if (suspicionIncrease > 0)
|
||
{
|
||
metroToolTip1.SetToolTip(button, $"Риск: +{suspicionIncrease} к подозрению");
|
||
}
|
||
else
|
||
{
|
||
metroToolTip1.SetToolTip(button, "");
|
||
}
|
||
}
|
||
|
||
private void ResetButtons()
|
||
{
|
||
// Сбрасываем состояние всех кнопок
|
||
foreach (var button in new[] { metroButtonChoice1, metroButtonChoice2, metroButtonChoice3 })
|
||
{
|
||
button.Visible = false;
|
||
button.Enabled = true;
|
||
button.Tag = null;
|
||
metroToolTip1.SetToolTip(button, "");
|
||
}
|
||
}
|
||
|
||
private void DisableAllButtons()
|
||
{
|
||
// Делаем все кнопки, кроме первой, невидимыми
|
||
metroButtonChoice1.Visible = true;
|
||
metroButtonChoice1.Enabled = false;
|
||
metroButtonChoice2.Visible = false;
|
||
metroButtonChoice3.Visible = false;
|
||
}
|
||
|
||
private void HandleChoice(object sender)
|
||
{
|
||
// Проверяем, что отправитель - это кнопка с корректными данными
|
||
if (sender is MetroButton clickedButton)
|
||
{
|
||
// Обработка кнопки "Начать заново"
|
||
if (clickedButton.Text.Contains("Начать заново?"))
|
||
{
|
||
ResetGameState();
|
||
GoToStage(0);
|
||
return;
|
||
}
|
||
|
||
// Проверка наличия данных кнопки
|
||
if (clickedButton.Tag is ButtonData data)
|
||
{
|
||
// Проверка достаточности денег
|
||
if (money >= data.Cost)
|
||
{
|
||
// Применяем изменения состояния
|
||
money -= data.Cost;
|
||
suspicion += data.SuspicionIncrease;
|
||
|
||
// ДОБАВИТЬ: Обновляем консоль разработчика, если она открыта
|
||
if (devConsole != null && devConsole.Visible)
|
||
{
|
||
devConsole.UpdateValues();
|
||
}
|
||
|
||
// Переходим на следующий этап
|
||
GoToStage(data.TargetStage);
|
||
}
|
||
else
|
||
{
|
||
MetroMessageBox.Show(this,
|
||
"Недостаточно средств для этого действия!",
|
||
"Нет денег",
|
||
MessageBoxButtons.OK,
|
||
MessageBoxIcon.Warning);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// --- Обработчики событий кнопок ---
|
||
private void metroButtonChoice1_Click(object sender, EventArgs e)
|
||
{
|
||
HandleChoice(sender);
|
||
}
|
||
|
||
private void metroButtonChoice2_Click(object sender, EventArgs e)
|
||
{
|
||
HandleChoice(sender);
|
||
}
|
||
|
||
private void metroButtonChoice3_Click(object sender, EventArgs e)
|
||
{
|
||
HandleChoice(sender);
|
||
}
|
||
|
||
// Класс для хранения данных кнопки
|
||
public class ButtonData
|
||
{
|
||
public int TargetStage { get; set; }
|
||
public int Cost { get; set; } = 0;
|
||
public int SuspicionIncrease { get; set; } = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|