Показать сообщение отдельно
Старый 03.08.2023, 00:47   #1412
Dimas1999
Местный
 
Аватар для Dimas1999
 
Регистрация: 18.11.2015
Адрес: Анапа
Сообщений: 1,657
По умолчанию

Эксперимент.
1. Бак горит, состояние 4.
2. Горящий бак успел повредить соседний бак, огонь уже пропал, состояние 3.
3. Протектор загерметизировал текущий бак.
4. Дымящийся бак стал меньше дымить, состояние 2.
5. Бак перестал дымить и теперь он течёт, состояние 1.
Позже бак перестал течь, состояние 0.

К сожалению, игре не возможно определить от чего потёк бак и протектор ремонтирует любую течь. Зато отсюда получается багофича. Скорее всего, всё топливо успеет сгореть или вытечь пока бак "ремонтируется". Т.к. нет топлива, больше шансов на прекращение пожара (в жизни). Теперь есть шанс спланировать на самолёте до своей территории.
Для теста поставил 100% воспламеняемость бака, 10% вероятность "ремонта" бака в каждом состоянии и 14% вероятность перекидывания огня. С предыдущими вариантами кода получались интересные варианты, когда один бак тух, но в последнюю секунду огонь перебрасывался на соседний бак и от него снова загорался первый бак. Иногда дымящийся бак снова вспыхивал. Надо играть с вероятностью затухания, чтобы код из базового класса вызывал снова пожар.
Случайное затухание и возгорание ещё прописано в базовых классах, но с такими настройками дымление никогда у меня ещё не пропадало.
При тестах стоит бесконечный запас топлива, иначе, пока потухнет бак и прекратится течь, топлива может уже не остаться.
Взрыв бака зарыт где-то в базовых классах, иногда бак почти сразу взрывается, а иногда можно летать несколько минут.


Код:
    public void rareAction(float paramFloat, boolean paramBoolean)
    {
        super.rareAction(paramFloat, paramBoolean);
        if(paramBoolean)
        {
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 1, 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 0, 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 3, 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] > 4 && World.Rnd().nextFloat() < 0.14F)
                ((FlightModelMain) (super.FM)).AS.hitTank(this, 2, 1);

            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] == 1 && World.Rnd().nextFloat() < 0.1F)
                ((FlightModelMain) (super.FM)).AS.repairTank(0);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] == 1 && World.Rnd().nextFloat() < 0.1F)
                ((FlightModelMain) (super.FM)).AS.repairTank(1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] == 1 && World.Rnd().nextFloat() < 0.1F)
                ((FlightModelMain) (super.FM)).AS.repairTank(2);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] == 1 && World.Rnd().nextFloat() < 0.1F)
                ((FlightModelMain) (super.FM)).AS.repairTank(3);

            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] == 2 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 0, ((FlightModelMain) (super.FM)).AS.astateTankStates[0] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] == 2 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 1, ((FlightModelMain) (super.FM)).AS.astateTankStates[1] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] == 2 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 2, ((FlightModelMain) (super.FM)).AS.astateTankStates[2] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] == 2 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 3, ((FlightModelMain) (super.FM)).AS.astateTankStates[3] - 1);

            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] == 3 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 0, ((FlightModelMain) (super.FM)).AS.astateTankStates[0] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] == 3 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 1, ((FlightModelMain) (super.FM)).AS.astateTankStates[1] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] == 3 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 2, ((FlightModelMain) (super.FM)).AS.astateTankStates[2] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] == 3 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 3, ((FlightModelMain) (super.FM)).AS.astateTankStates[3] - 1);

            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] == 4 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 0, ((FlightModelMain) (super.FM)).AS.astateTankStates[0] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] == 4 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 1, ((FlightModelMain) (super.FM)).AS.astateTankStates[1] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] == 4 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 2, ((FlightModelMain) (super.FM)).AS.astateTankStates[2] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] == 4 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 3, ((FlightModelMain) (super.FM)).AS.astateTankStates[3] - 1);

            if(((FlightModelMain) (super.FM)).AS.astateTankStates[0] == 5 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 0, ((FlightModelMain) (super.FM)).AS.astateTankStates[0] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[1] == 5 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 1, ((FlightModelMain) (super.FM)).AS.astateTankStates[1] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[2] == 5 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 2, ((FlightModelMain) (super.FM)).AS.astateTankStates[2] - 1);
            if(((FlightModelMain) (super.FM)).AS.astateTankStates[3] == 5 && World.Rnd().nextFloat() < 0.1F)
				((FlightModelMain) (super.FM)).AS.setTankState(this, 3, ((FlightModelMain) (super.FM)).AS.astateTankStates[3] - 1);
Миниатюры
Нажмите на изображение для увеличения
Название: 2023.08.02 21-27-36.jpg
Просмотров: 261
Размер:	762.6 Кб
ID:	74029   Нажмите на изображение для увеличения
Название: 2023.08.02 21-27-47.jpg
Просмотров: 275
Размер:	761.4 Кб
ID:	74030   Нажмите на изображение для увеличения
Название: 2023.08.02 21-27-59.jpg
Просмотров: 247
Размер:	845.3 Кб
ID:	74031   Нажмите на изображение для увеличения
Название: 2023.08.02 21-28-11.jpg
Просмотров: 255
Размер:	814.1 Кб
ID:	74032   Нажмите на изображение для увеличения
Название: 2023.08.02 21-28-17.jpg
Просмотров: 257
Размер:	903.8 Кб
ID:	74033  


Последний раз редактировалось Dimas1999; 03.08.2023 в 00:50. Причина: дописка текста
Dimas1999 вне форума   Ответить с цитированием