Virtual pin for 4 state case, instead make virtual pin just to push state 3

Hi guys, i new in arduino and blynk, i use nodemcu esp8266, can anyone help? i want to make virtual pin just to push state 3 (case 3 //starter) in my code, i have 4 state case push with single button to on/off multiple relay, can anyone know how to insert it??

// Multiple state handling
//Version 1.00
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
char auth[] = "h5bh81r6leLuHbe188Zt8k0K8eKmNyF8";
char ssid[] = "RIZKY";
char pass[] = "langit123";

#define relayOFF  HIGH
#define relayON   !relayOFF

#define PUSHED    HIGH

#define relay1    D1
#define relay2    D2
#define relay3    D3
#define relay4    D5

#define capSwitch D4 //tombol  HIGH = pushed?

//when relay4Flag is true we are timing relay 4
boolean relay4Flag = false;
boolean relay1Flag = false;
boolean relay3Flag = false;


byte state      = 0;
byte buttonPoll = 0;

byte lastButtonPoll;

//timing stuff
unsigned long switchMillis;
unsigned long relay4Millis;
unsigned long relay1Millis;
unsigned long relay3Millis;


const unsigned long relay4Interval = 1000;  //one second
const unsigned long relay1Interval = 1000;  //one second
const unsigned long relay3Interval = 1000;  //one second


//*************************************************************************
void setup()
{
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
  pinMode(capSwitch, INPUT);  //pushed = HIGH?
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);

  digitalWrite(relay1, relayOFF);
  digitalWrite(relay2, relayOFF);
  digitalWrite(relay3, relayOFF);
  digitalWrite(relay4, relayOFF);

} //END of setup()

//*************************************************************************
void loop()
{
  Blynk.run();
  //********************************
  //is it time to check our switches? (every 50 millis seconds)
  if (millis() - switchMillis >= 50)
  {
    //restart this timer
    switchMillis = millis();

    //see what's happening with our switches
    checkSwitches();
  }

  //********************************
  //when we are timing relay 4, has the timer finished?
  if (relay4Flag == true && millis() - relay4Millis >= relay4Interval)
  {
    //disable timing
    relay4Flag = false;

    digitalWrite(relay4, relayOFF);
  }
  
if (relay1Flag == true && millis() - relay1Millis >= relay1Interval)
  {
    //disable timing
    relay1Flag = false;

    digitalWrite(relay1, relayON);
  }

if (relay3Flag == true && millis() - relay3Millis >= relay3Interval)
  {
    //disable timing
    relay3Flag = false;

    digitalWrite(relay3, relayON);
  }

  //********************************
  //check the StateMachine
  stateMachine();

  //********************************
  // other none blocking code goes here
  //********************************

} //END of loop()


//*************************************************************************
void checkSwitches()
{
  buttonPoll = digitalRead(capSwitch);

  //has the switch changed state?
  if (lastButtonPoll != buttonPoll)
  {
    //update to the new state
    lastButtonPoll = buttonPoll;

    //****************************
    //is the switch PUSHED
    if (buttonPoll == PUSHED)
    {
      //do nothing
    }

    //****************************
    //switch has been released
    else
    {
      state++;

      if (state > 4)
      {
        state = 0;
        relay1Flag = false;
        digitalWrite(relay1, relayOFF);
        digitalWrite(relay2, relayOFF);
        relay3Flag = false;
        digitalWrite(relay3, relayOFF);
        //disable timing
        relay4Flag = false;
        digitalWrite(relay4, relayOFF);
      }
    }

  } //END of if (lastButtonPoll != buttonPoll)

} //END of checkSwitches()

//*************************************************************************
void stateMachine()
{
  switch (state)
  {
    //******************
    case 0:
      //do nothing
      break;

    //******************
    case 1: //on
      digitalWrite(relay1, relayON);
      digitalWrite(relay2, relayOFF);
      digitalWrite(relay3, relayOFF);
      digitalWrite(relay4, relayOFF);

      break;

    //******************
    case 2: //acc
      digitalWrite(relay1, relayON);
      digitalWrite(relay2, relayON);
      digitalWrite(relay3, relayON);
      digitalWrite(relay4, relayOFF);

      break;

    //******************
    case 3: //stater
    
      relay1Flag = true;    
      digitalWrite(relay1, relayOFF);
      relay1Millis = millis();

      digitalWrite(relay2, relayON);

      //enable timing
      relay4Flag = true;
      digitalWrite(relay4, relayON);
      //start timer
      relay4Millis = millis();
      
      relay3Flag = true;
      digitalWrite(relay3, relayOFF);
      relay3Millis = millis();

      state = 4;

      break;

    //******************
    case 4:
      //do nothing
      break;

    //******************
    default:

      break;

  } //END of switch/case

} //END of  stateMachine()

Before you do anything, you need to sort-out your void loop.

Pete.

From the code below, each bottom push (after release) will increase state by 1 “state++”

At code start: state=0
One push: state=1
One push: state=2
One push: state=3
Then state will be 4 automatically: state=4
One push: state will be 5: state=5
Then state will be 0 automatically: state=0
And so on…

If you change “state++” to “state=3”
It will be as below

At code start: state=0
One push: state=3
Then state will be 4 automatically: state=4
One push: state will be 5: state=5
Then state will be 0 automatically: state=0

So just change “state++” to “state=3” and try

If you can explain the logic behind this code, it will be easier to help and give you required modifications
Such as, what is connected to the 4 relays and what you want to happen when you push button.