How to avoid engine destroy the character when player leave or get disconnect

Nope, i checked the source PawnLeavingGame is called direcly on player controller destruction (which happens when player leave).

void APlayerController::PawnLeavingGame()
{
	if (GetPawn() != NULL)
	{
		GetPawn()->Destroy();
		SetPawn(NULL);
	}
}


void APlayerController::Destroyed()
{
	if (GetPawn() != NULL)
	{
		// Handle players leaving the game
		if (Player == NULL && Role == ROLE_Authority)
		{
			PawnLeavingGame();
		}
		else
		{
			UnPossess();
		}
	}

As you can see there is condition checking if player really left (Player == NULL) and check if code runs on server (Role == ROLE_Authority), if player (the UPlayer object) still on server or playercontroller is not on server (which always will be) then it will unpossess insted.